You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 12:39:05