【问题标题】:Right Join in Doctrine2 for Symfony2为 Symfony2 正确加入 Doctrine2
【发布时间】:2012-11-02 18:55:18
【问题描述】:

我有以下有效的 MySQL 查询:

SELECT *
FROM bogenantworten a
    RIGHT JOIN
        bogenfragen f ON f.id = a.bogenfragen_id
        AND a.personen_id = 3,
    BogenTyp t, 
    BogenFragenGruppe g
WHERE
    t.id = f.fragentyp_id AND
    g.id = f.fragengruppen_id AND
    t.id = 1
ORDER BY f.sortierung ASC

现在我需要在 Doctrine2 DQL 或 QueryBuilder 中使用它。我已经了解到 D2 迫使我思考对象,但我找不到任何建议如何标记我的实体以使其工作。

所以我想让上面的 MySQL 查询在我的 Symfony2 应用程序中工作,或者帮助我正确地注释我的实体,这样我就可以在 BogenAnworten 和 BogenFragen 之间建立一个正常工作的连接连接(3 和 1 是参数,只是让你知道)。我已经为我的所有实体设置了 OneToMany 和 ManyToOne 注释,但我需要一些东西来使右/左连接正常工作。

如果你想帮助我进行实体设计:

我有回答(表 BogenAntworten)问题(表 BogenFragen)的人(表 Person),当我显示问题列表时,我要么得到该问题的最后一个答案(保存时需要 UPDATE),要么没有,并且我必须创建它(保存时插入)。问题也属于多种类型之一(表 BogenTyp),并且属于多个组之一(表 BogenFragenGruppe)

有什么想法吗?

【问题讨论】:

    标签: sql symfony doctrine-orm


    【解决方案1】:

    好的,我自己又发现了。 Doctrine2 的 QueryBuilder 支持 leftJoin(如果切换两个表,它与 RIGHT JOIN 相同)。对于那些需要一些代码的人,这里是上面使用 QueryBuilder 构建的 SQL 语句:

    $query = $em->createQueryBuilder()
        ->select(array('f.id', 'f.frage', 'f.sortierung', 'a.antwort', 'g.name'))
        ->from('MySuperBundle:BogenFragen', 'f')
        ->leftJoin('f.bogenantworten', 'a', 'WITH', 'a.personen = :pid')
        ->from('MySuperBundle:BogenTyp', 't')
        ->from('MySuperBundle:BogenFragenGruppe', 'g')
        ->where('t.id = :tid')
        ->andWhere('t.id = f.bogentypen')
        ->andWhere('g.id = f.bogenfragengruppe')
        ->orderBy('f.sortierung', 'ASC')
        ->setParameter('tid', 1)
        ->setParameter('pid', 3)
        ->getQuery();
    

    (参数实际上是动态的,但为了便于阅读,我使用了原始 SQL 语句的数字)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-14
      • 2014-10-06
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多