php - Doctrine 2 具有一对多关系的实体

标签 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"

当我加入主题评论时,为什么主义会获取评论内的多对一关系?这是我的查询:

$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/

相关文章:

java - Hibernate - 强制父类和子类之间的内部连接

php - Symfony2 + 学说 : Tool for generating relations between entities

mongodb - 如何使用 mongodb 从 doctrine ODM 中的引用文档数组中删除文档

php - 查找从今天到接下来或过去 30 天的所有记录

mysql - 我可以使用MySQL建立Symfony2 ORM继承关系吗?

javascript - Sequelize : "Model has not been defined" when relationship across multiple databases

php - 如何使用 Laravel 5.2 以相同的方法添加和更新表行

php - PHP 中的双向加密来混淆 ID?

php - 如何使用 SharePoint Online 对 PHP 应用程序进行身份验证?

php - yII2:日期过滤器如何在 Gridview 中