我正在尝试获取具有一对多关系的注释,但是一旦我使用联接,我最终会得到以下数据:
entities\Topic
id = 1 // integer
title = "example" // string
comments // entities\Comment = oneToMany
id = 1 // integer
comment = "first comment" // string
topic // entities\Topic = manyToOne
id = 1 // again..
title = "example"
当我加入主题评论时,为什么主义会获取评论内的多对一关系?这是我的查询:
$this->em->createQueryBuilder()
->from('Entities\Topic', 't')
->select("t, c")
->leftjoin("t.comments", 'c')
->where('t.id = :id')
->setParameter('id', 1)
->getQuery()->getSingleResult();
topic 属性不应该为 null 或至少是一个空的 arrayCollection 吗?
另一件事:
当我指定注释是一个 arrayCollection 时,为什么我会得到一个 PersistentCollection 作为注释?我是否总是需要在 PersistentCollection 上使用 unwrap 才能循环访问它?
最佳答案
首先 - 它可能会填充主题,因为它已经拥有数据。如果手头还没有数据,您可能会有一个代理实体。它永远不会为 null,因为 null 是错误的(评论确实有主题)。
对于ArrayCollection/PersistentCollection,您可以放心地忽略它们之间的区别。我不知道实现细节,但基本上,EM 在 PersistentCollections 中返回内容,我认为它在管理集合中的实体方面发挥了作用。如果您要创建集合,则可以使用 ArrayCollection。抱歉,我不能在这里说得更具体,但底线是,您可能应该将从 EM 获得的任何 PersistentCollections 视为“集合”
关于php - Doctrine 2 具有一对多关系的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5682092/