Symfony/Doctrine:如何在一对多关系中使用addJoinedEntityResult方法?

6
我有以下问题。我猜是误解。但是在谷歌上搜索了几个小时,没有找到解决方案,所以我在这里发布它。
我在Doctrine中有一个本地查询:
$rsm = new ResultSetMapping;
        $rsm->addEntityResult('Acme\CommentBundle\Entity\Comment', 'c');
        $rsm->addFieldResult('c', 'comment_id', 'id');
        $rsm->addFieldResult('c', 'slug', 'slug');
        $rsm->addFieldResult('c', 'comment', 'comment');
        $rsm->addFieldResult('c', 'created', 'created');
        $rsm->addJoinedEntityResult('Acme\AccountBundle\Entity\Worker', 'w', 'c', 'komments');
        $rsm->addFieldResult('w', 'worker_id', 'id');
        $rsm->addFieldResult('w', 'worker_name', 'name');
        $rsm->addJoinedEntityResult('Acme\CommentBundle\Entity\Document', 'd', 'c', 'documents');
        $rsm->addFieldResult('d', 'document_id', 'id');
        $rsm->addFieldResult('d', 'document_name', 'name');

        return $this->getEntityManager()
            ->createNativeQuery('SELECT t.id, c.id AS comment_id, c.slug, c.created, c.comment, c.worker_id AS comment_worker_id, c.created AS comment_created, d.id AS document_id, d.name AS document_name, w.id AS worker_id, w.name AS worker_name
            FROM comment_thread t
            INNER JOIN project p ON p.comment_thread_id = t.id
            LEFT JOIN comment c ON t.id = c.thread_id
            INNER JOIN worker w ON c.worker_id = w.id
            LEFT JOIN comment_document d ON c.id = d.comment_id
            WHERE p.id = :project_id
            ORDER BY c.created ASC', $rsm)
            ->setParameter('project_id', $

很不幸,第一个addJoinedEntityResult(Worker)无法工作。如果我将其删除,则剩余的addJoinedEntityResult(Document)就非常完美。
我想这是因为文档与评论相关联。因此,评论是文档的“父母”。
对于工人来说,情况正好相反:评论是工人的“孩子”,而不是像文档那样的“父母”。
换句话说: - 工人可以有多个评论 - 评论可以有多个文档
我的结果集应该以评论为基础,具有关联的(一个)工人和(0 .. n)文档。
但是,如何在我的Doctrine结果映射中设置这些关系?
任何帮助都将不胜感激 :-)
Nicki

你尝试过直接使用Doctrine ORM通过DQL查询工作吗? - user5192753
2个回答

0
我的建议是,当你附加第二个实体时,映射器应该重写“name”字段。我曾经遇到过同样的情况,并通过在表格、实体映射和实体类中重新命名字段来解决了这个问题,这样不同的实体/表格就不会有相同的名称属性/列了。

-1

我看不到你的实体,所以我不确定这是否有帮助,但看起来你有一个打字错误:

$rsm->addJoinedEntityResult('Acme\AccountBundle\Entity\Worker', 'w', 'c', 'komments');

可能应该是

$rsm->addJoinedEntityResult('Acme\AccountBundle\Entity\Worker', 'w', 'c', 'comments');

(komments 转为 comments)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接