Доктрина 2: отношение OneToMany, объект не загружен

#orm #doctrine-orm #symfony #lazy-loading

#orm #доктрина-orm #symfony #отложенная загрузка

Вопрос:

Вот моя проблема: у меня есть 3 объекта Item, User и Link выше (у этих классов также есть обычные методы получения и установки).

 class User {

    //...

    /*
     * @ORMOneToMany(targetEntity="Link", mappedBy="user", cascade={"persist", "remove"})
     * 
     */
    protected $links;

    //...

}
  
 class Item {

    //...

    /*
     * @ORMOneToMany(targetEntity="Link", mappedBy="item", cascade={"persist", "remove"})
     * 
     */
    protected $links;

    //...

}
  
 class Link {

    /**
     * @var datetime $time
     *
     * @ORMColumn(name="time", type="datetime")
     */
    private $time;

    /**
     * 
     * @ORMId
     * @ORMManyToOne(targetEntity="Item", inversedBy="links")
     * @ORMJoinColumn(name="item_id", referencedColumnName="id")
     */
    private $item;

    /**
     *
     * @ORMId
     * @ORMManyToOne(targetEntity="User", inversedBy="links")
     * @ORMJoinColumn(name="user_id", referencedColumnName="id")
     */
    private $user;

    //...

}
  

Я не использовал отношение ManyToMany из-за свойства $ time в классе Link.

Когда я создаю ссылку, я делаю это таким образом :

 $link = getExistingLink($item, $user);

if (!$link) {
    $link = new Link();
    $link->setItem($item);
    $link->setUser($user);
}
$link->setTime(new DateTime());
$em = $this->getEntityManager();
$em->persist($link);
$em->flush();
  

Данные записываются в базу данных, однако, когда я вызываю $user-> getLinks(), он возвращает NULL. Я попытался это сделать :

 $user->addLink($link);
$em->persist($user);
$em->flush();
  

Но ссылка не будет загружена при следующей загрузке $user.

Есть идеи, почему объекты ссылки не загружены?

Комментарии:

1. Я никогда не использовал аннотацию @ORM Id для отношения ManyToOne . Я думаю, что это только для идентификатора таблицы, а не для идентификаторов в целом. Вы пытались удалить его?

2. На самом деле я использовал @ORM Id для этих 2 свойств, потому что я хочу создать свой первичный ключ из этих 2 столбцов (как это было бы сделано в отношениях ManyToMany). Тем не менее, я попытался установить один столбец Id и все равно получил тот же результат.

Ответ №1:

ХОРОШО, проблема решена.

Аннотации начинаются с /* вместо /** как в классах User, так и в классах Item.

Просто глупая ошибка…