具有一对多关系的主义2实体

时间:2011-04-15 20:35:17

标签: php orm doctrine-orm

我正在尝试使用一对多关系获取注释,但只要我使用连接,我就会得到以下数据:

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?

1 个答案:

答案 0 :(得分:3)

在第一位 - 它可能填充主题,因为它已经有数据。如果数据尚未存在,那么您可能在那里拥有代理实体。它永远不会为null,因为null是错误的(注释确实有一个主题)。

对于ArrayCollection / PersistentCollection,您可以放心地忽略这种区别。我不知道实现的细节,但基本上,EM在PersistentCollections中提供了一些东西,我认为它在管理集合中的实体方面发挥了作用。如果您正在创建集合,则使用ArrayCollection。对不起,我不能在这里更具体,但最重要的是,您应该只考虑从EM获得的任何PersistentCollections只是“一个集合”