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

Symfony中使用Doctrine实现带NOT IN子查询的SQL查询方法

解决方案

你可以通过Doctrine QueryBuilder的表达式方法嵌套子查询来实现需求,示例代码如下:

// 1. 构建子查询,对应你SQL里的NOT IN括号内逻辑
$subQueryBuilder = $entityManager->createQueryBuilder(); // 实体管理器实例,在Repository中可直接用$this->createQueryBuilder
$subQueryBuilder
    ->select('h.taskId') // 替换为你Hardware实体中对应task_id的属性名
    ->from('App\Entity\Task', 'task') // 替换为你项目中Task实体的实际命名空间
    ->innerJoin('App\Entity\Hardware', 'h', 'WITH', 'h.taskId = task.id'); // 替换为你Hardware实体的实际命名空间

// 2. 主查询嵌入子查询
$result = $test->createQueryBuilder('t')
    ->select('t.id')
    ->where($subQueryBuilder->expr()->notIn('t.id', $subQueryBuilder->getDQL()))
    ->getQuery()
    ->getArrayResult();

注意事项

  • 所有实体命名空间需要替换为你项目内的实际路径,不能直接照搬示例
  • Doctrine查询用的是实体属性名,不是数据库字段名,如果你的实体属性是驼峰格式要对应修改,不要直接写蛇形的数据库字段
  • 如果你在Task实体中已经定义了和Hardware的关联属性,关联部分可以简化为->innerJoin('task.hardware', 'h'),不需要额外写WITH条件

内容的提问来源于stack exchange,提问作者Stefan DOK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:09:00