我正在尝试使用一对多关系获取注释,但只要我使用连接,我就会得到以下数据:
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"
当我加入主题评论时,为什么doctrine会在注释中获取manyToOne关系?这是我的问题:
$this->em->createQueryBuilder()
->from('Entities\Topic', 't')
->select("t, c")
->leftjoin("t.comments", 'c')
->where('t.id = :id')
->setParameter('id', 1)
->getQuery()->getSingleResult();
主题属性不应该为null或者至少是一个空的arrayCollection吗?
另一件事:
当我指定comments是一个arrayCollection时,为什么我将PersistentCollection作为注释返回?在循环使用之前,我是否总是需要在PersistentCollection上使用unwrap?
答案 0 :(得分:3)
在第一位 - 它可能填充主题,因为它已经有数据。如果数据尚未存在,那么您可能在那里拥有代理实体。它永远不会为null,因为null是错误的(注释确实有一个主题)。
对于ArrayCollection / PersistentCollection,您可以放心地忽略这种区别。我不知道实现的细节,但基本上,EM在PersistentCollections中提供了一些东西,我认为它在管理集合中的实体方面发挥了作用。如果您正在创建集合,则使用ArrayCollection。对不起,我不能在这里更具体,但最重要的是,您应该只考虑从EM获得的任何PersistentCollections只是“一个集合”