Почему не работает отношение one-to-many?

Доброй ночи.
Есть таблица `limits` и таблица `limits_params`.
Схемы этих таблиц
CREATE TABLE limits(
    id INT AUTO_INCREMENT NOT NULL,
    PRIMARY KEY(id)
) ENGINE = InnoDB;

CREATE TABLE limits_params(
    id INT AUTO_INCREMENT NOT NULL,
    limit_id INT DEFAULT NULL,
    PRIMARY KEY(id)
) ENGINE = InnoDB;
ALTER TABLE `limits_params` ADD CONSTRAINT fk_limit_id FOREIGN KEY (`limit_id`) REFERENCES `limits` (id)

Есть соответствующие сущности Limits и LimitParams.
Открыть код
/**
 * @ORM\Entity(repositoryClass="App\Repository\LimitsRepository")
 */
class Limits
{
    /**
     * @ORM\OneToMany(targetEntity="App\Entity\LimitParams", mappedBy="limit", cascade={"persist"})
     */
    private $params;

    public function __construct() {
        $this->params = new ArrayCollection();
    }

    public function getParams()
    {
        return $this->params;
    }
}

/**
 * @ORM\Entity(repositoryClass="App\Repository\LimitParamsRepository")
 * @ORM\Table(name="limits_params")
 */
class LimitParams
{
    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Limits", inversedBy="params", cascade={"persist"})
     * @ORM\JoinColumn(name="limit_id", referencedColumnName="id")
     */
    private $limit;
}

Сделал все как по учебнику, по всей логике должно работать. Но не работает, getParams всегда возвращает пустую коллекцию. Пробовал юзать JoinTable в сущности Limits, дабы явно указать на таблицу с $params, но так тоже не работает.

При этом в базе данных есть все записи в обеих таблицах - версия "в таблицe limits_params нет записей" исключена. Записи также нормально создаются при помощи сеттеров в обеих сущностях.

Что я упустил? Почему не работает?
  • Вопрос задан
  • 71 просмотр
Решения вопроса 1
prototype_denis
@prototype_denis
Symfony
Доктрина "лениво" грузит коллекции. Это значит, что результаты будут только при явном обращении, то есть при итеририровании и обращении к свойствам.

Для "жадной" загрузки в кофиге (в вашем случае аннотации) нужно прописать eager="fetch", тогда коллекция будет проинициализирована сразу же
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы