Doctrine QueryBuilder使用innerJoin时仅存项目所有者返回null原因求解
问题原因
你遇到的问题是内连接的特性导致的,具体原因如下:
- 查询中使用了
innerJoin关联项目贡献者实体:内连接只会保留两张表中满足关联匹配条件的行,若某个项目没有关联任何贡献者实体,该项目会在连接执行阶段就被直接从结果集中过滤,后续的where条件不会对这部分已过滤的项目生效,自然也无法匹配到仅设置了所有者的项目。
修复方案
将内连接innerJoin替换为左连接leftJoin即可,左连接会完整保留左表(项目表p)的所有行,即便右表(项目贡献者表)没有匹配的关联数据也不会过滤主表的项目,后续的所有者匹配条件可以正常作用于所有项目:
return $this->createQueryBuilder('p') ->leftJoin('p.project_contributors', 'pc') ->where('p.project_owner = :val') ->orWhere('pc.id = :val') ->setParameter('val', $value) ->getQuery() ->getResult() ;
内容的提问来源于stack exchange,提问作者UXerUIer
相关产品推荐
相关产品推荐

