首页 > 解决方案 > Doctrine OneToMany 关系的问题

问题描述

我对教义关系有疑问。我尝试不同的方法,但任何方法都行不通。想法是我有一个新闻实体,每条新闻都应该有很多评论。所以我接下来尝试:

新闻实体:

/**
 * @ORM\OneToMany(targetEntity="App\ORM\Entity\NewsComment", mappedBy="news")
 */
protected \Doctrine\Common\Collections\Collection $comments;

/**
 * News constructor.
 */
public function __construct() {
    $this->comments = new ArrayCollection();
}

和 NewsComment 实体:

/**
 * @ORM\ManyToOne(targetEntity="App\ORM\Entity\News", inversedBy="comments")
 */
protected \App\ORM\Entity\News $news;

每个实体也有自己的 get 和 set 方法。

但是,当我收到新闻实体时,可以获取评论集合,但它总是空的。另一方面,我可以获取任何 NewsComment 实体并从该 News 实体中获取。它工作正常。但不是以另一种方式。

我的代码有什么问题吗?

标签: phpdoctrine-orm

解决方案


默认情况下,Doctrine 将拥有(非反转)集合设置为惰性。
通过数据库检索实体时,您应该看到一个空的PersistentCollection而不是ArrayCollection,其initialized属性设置为 false。

当调用该集合的任何方法时,doctrine 会触发初始化集合并填充它所需的查询。

集合空虚应该只在调用时检查isEmpty


推荐阅读