Doctrine中使用LEFT JOIN时如何添加额外AND关联条件
Doctrine LEFT JOIN追加AND条件修改方案
修改逻辑很简单:Doctrine QueryBuilder的leftJoin()方法支持自定义JOIN阶段的额外筛选条件,注意这类条件不能放到WHERE中定义,否则左连接会退化为内连接,过滤掉未被当前用户点赞的照片,不符合需求。
修改后的代码如下:
return $this->createQueryBuilder('photo') // 第四个参数定义JOIN ON部分的额外AND条件,用参数绑定避免SQL注入 ->leftJoin("photo.likedPhotos", "lp", "photo.id = lp.Photo AND lp.user = :currentUserId") ->addSelect('lp') ->where('photo.is_public = 1') ->setParameter('currentUserId', 6) // 动态传值场景下直接替换为对应变量即可 ->orderBy('photo.uploaded_at', 'DESC') ->getQuery();
补充说明
- 如果你在Photo实体中已经正确配置了和LikedPhoto的一对多关联,手动写的
photo.id = lp.Photo关联条件可以省略,Doctrine会自动根据实体配置生成关联规则,简化写法如下:->leftJoin("photo.likedPhotos", "lp", "WITH", "lp.user = :currentUserId") - 注意条件里写的是实体属性名,如果你LikedPhoto实体中对应用户的字段命名不同,替换成实际的属性名即可。
内容的提问来源于stack exchange,提问作者jsmarchewka
相关产品推荐
相关产品推荐

