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(ドキュメント)は完璧になります。

これは、ドキュメントがコメントにリンクされているためだと思います。したがって、コメントはドキュメントの「親」です。ワーカーの場合はその逆です。コメントはワーカーの「子」であり、ドキュメントのような「親」ではありません。

言い換えると、-ワーカーは複数のコメントを持つことができます-コメントは複数のドキュメントを持つことができます

私の結果セットには、(1つの)ワーカーと(0 .. n)ドキュメントが関連付けられた、ベースとしてのコメントが含まれている必要があります。

しかし、Doctrine Result Mappingでこの関係を設定するにはどうすればよいですか?

どんな助けでも大歓迎です:-)

ニッキー

4

2 に答える 2

0

私の提案は、2番目のエンティティをアタッチするときにマッパーが「名前」フィールドを書き換えるものです。同じ状況があり、テーブル、エンティティ マッピング、およびエンティティ クラスのフィールドの名前を変更して修正し、異なるエンティティ/テーブルが同じ名前のプロパティ/列を持たないようにしました。

于 2016-03-07T09:58:54.287 に答える