В последний час или около того я пытаюсь получить приведенный ниже запрос 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;
DQL:
$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 выводит результаты. Однако эти фильтры должны быть активными, поскольку оба фильтра должны быть отфильтрованы.
Надеюсь, у вас, ребята, есть идея, как исправить набор результатов.