php - 教义dql没有返回MySQL的预期结果
问题描述
最后一个小时左右,我试图让下面的 MySQL 查询在 DQL 中工作,但是它没有返回预期的结果,它什么也不输出。
这是输出正确结果的 MySQL 查询。
MySQL:
SELECT vp.id FROM vehicle_photo AS vp
INNER JOIN vehicle AS v ON vp.vehicle_id = v.id AND vp.manualMaintenanceCheckedOn IS NULL AND vp.type_id = 1
LEFT JOIN vehicle_maintenance_history AS vmh ON vmh.vehicle_id = v.id AND vmh.source != 'kip' AND vmh.source != 'haan'
WHERE vmh.vehicle_id IS NULL
LIMIT 1;
数据质量:
$qb = $this->getDoctrine()->getEntityManager()->createQueryBuilder();
$qb->select('vp.id')
->from('VaartlandIntranetBundle:VehiclePhoto', 'vp')
->innerJoin('vp.vehicle', 'v')
->leftJoin('v.vehicleMaintenanceHistory', 'vmh', \Doctrine\ORM\Query\Expr\Join::WITH, 'vmh.vehicle = v.id')
->where('vp.type = 1')
->andWhere('vp.manualMaintenanceCheckedOn is null')
->andWhere('vmh.source != :kip')
->andWhere('vmh.source != :haan')
->andWhere('vmh.vehicle IS NULL')
->setParameter('kip','kip')
->setParameter('haan','haan')
->setMaxResults(1);
$ers = $qb->getQuery();
$res = $qb->getQuery()->getResult();
据我们所知,vmh.source 出了点问题。当省略“andWhere('vmh.source != :haan')”和“andWhere('vmh.source != :kip')”时,DQL 查询会输出结果。然而,这些过滤器需要被激活,因为两者都需要被过滤掉。
我希望你们知道如何修复结果集。
解决方案
恕我直言,您的原始 SQL 与 Doctrine 生成的不同。我会尝试这样的事情:
$qb = $this->getDoctrine()->getEntityManager()->createQueryBuilder();
$qb->select('vp.id')
->from('VaartlandIntranetBundle:VehiclePhoto', 'vp')
->innerJoin('vp.vehicle', 'v')
->leftJoin(
'v.vehicleMaintenanceHistory',
'vmh',
\Doctrine\ORM\Query\Expr\Join::WITH,
$qb->expr()->andx(
$qb->expr()->eq('vmh.vehicle', 'v.id'),
$qb->expr()->neq('vmh.source', ':kip'),
$qb->expr()->neq('vmh.source', ':haan')
)
)
->where('vp.type = 1')
->andWhere('vp.manualMaintenanceCheckedOn is null')
->andWhere('vmh.vehicle IS NULL')
->setParameter('kip', 'kip')
->setParameter('haan', 'haan')
->setMaxResults(1);
$ers = $qb->getQuery();
$res = $qb->getQuery()->getResult();
如果haan
和kip
动态参数将始终设置为kip
,haan
我会跳过赋值并将它们直接写入表达式。
更多信息:
推荐阅读
- haskell - 在 Haskell 中使用默认实现派生实例
- sql - postgreSQL 中的 UPDATE 表
- java - Android Studio codestyles/Project.xml 配置
- reactjs - 反应功能组件 setState 不更新状态
- c++ - C++ 错误:'operator<<' 不匹配(操作数类型是 'std::istream {aka std::basic_istream}' 和 'int')
- sass - 使用 rollup.js 编译单个 SCSS 文件
- html - 为什么我的有填充我没有应用?
- javascript - Javascript中的“(_,i)=>表达式”是什么意思?
- python - 熊猫仅在数据框中的特定时间之间合并股票数据
- mongodb - Unable to connect to MongoDB Atlas Cluster with MongoDB.Driver: 无法连接,因为目标机器主动拒绝