mysql - Doctrine2 链式多表连接和过滤

标签 mysql sql doctrine-orm

我正在尝试通过链式加入原则来仅选择有效结果来解决问题,但找不到合适的解决方案。尽可能简化:

  • 数据库架构:帖子可以有多个评论,每个评论均由作者撰写。
  • 任务:获取帖子列表,每个帖子都有 0 到 N 条仅由活跃作者撰写的活跃评论。

我尝试使用的基本查询是:

$queryBuilder
    ->select('p', 'c', 'a')
    ->from('AppBundle:Post', 'p')
    ->leftJoin('p.comment', 'c', Join::WITH, 'o.isActive = 1')
    ->leftJoin('c.author', 'a', Join::WITH, 'a.isActive = 1')
;

但显然,在不考虑“a.isActive”的情况下,仍然会产生所有评论。

我能看到的唯一其他方法是为“活跃作者的所有活跃评论”创建子查询,然后将其连接到主查询中的评论表,但似乎 Doctrine 不允许这样做

...
->leftJoin($subquery, 'GoodComments', Join::ON, 'GoodComments.comment_id = c.id')
...

那么我是否遗漏了一些东西,或者原生 SQL 是唯一的出路?有什么想法吗?

最佳答案

由于我无法写评论,所以我会在这里提供。

您是否尝试使用简单的 where 条件作为替代方案?

->leftJoin('p.comment', 'c')
->leftJoin('c.author', 'a')
->andWhere('o.isActive=1')
->andWhere('a.isActive=1')

关于mysql - Doctrine2 链式多表连接和过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30813963/

相关文章:

php - 如何使用条令命令实用程序从数据库生成实体?

symfony - 非 Id 列的 Doctrine2 关系

php - 在 laravel 的数据库中播种时出错

php - 如何在 CakePHP 3 中使用另一个表更新一个表

mysql - 从MYSQL中选择前四个字符是

sql - NULL 字段的重复记录计数 - 有更好的方法吗?

sql - 向 UTL_MAIL.SEND 提供凭据以绕过 ORA-29278

Mysql:我收到此错误:重复条目 ' ' index_name'。

php - 将table1的外键设置在table2的主键的一部分上

javascript - sequelize 将日期与日期时间戳进行比较