Doctrine 2:OneToMany关系,未加载实体

时间:2011-11-04 11:41:37

标签: orm doctrine-orm symfony lazy-loading

这是我的问题:我上面有3个实体Item,User和Link(这些类也有通常的getter和setter)。

class User {

    //...

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

    //...

}
class Item {

    //...

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

    //...

}
class Link {

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

    /**
     * 
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Item", inversedBy="links")
     * @ORM\JoinColumn(name="item_id", referencedColumnName="id")
     */
    private $item;

    /**
     *
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="User", inversedBy="links")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    private $user;

    //...

}

由于Link类中的$ time属性,我没有使用ManyToMany关系。

当我创建链接时,我这样做:

$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 个答案:

答案 0 :(得分:0)

确定问题已解决。

注释在User和Item类中以/ *而不是/ **开头。

只是一个愚蠢的错误......