Где не в запросе с доктриной построителя запросов

Я пытаюсь воспроизвести этот запрос:

SELECT * FROM reserva2 WHERE id_status = 92
    AND id_registro_pai IS NULL
    AND id_reserva NOT IN (SELECT 
        id_reserva
    FROM
        reserva_cancelamento_contato);

Это не работает, что может быть не так?

$qb = $em->createQueryBuilder();

$nots = $qb->select('reserva')
      ->from('Entities\Reserva2', 'reserva')
       $qb->where('reserva.idRegistroPai IS NULL');
       $qb->andWhere('reserva.idStatus = 92');
      ->getQuery()
      ->getResult();

$linked = $qb->select('rcc')
         ->from('Entities\ReservaCancelamentoContato,''rc')
         ->where($qb->expr()->notIn('rc.id_reserva', $nots))
         ->getQuery()
         ->getResult();

Я думаю, что я неправильно подключен к QueryBuilder

1 ответ

Вы должны использовать DQL подзапроса вместо результатов и извлечь только идентификатор, например, вы можете изменить подвыбор:

$qb = $em->createQueryBuilder();

$nots = $qb->select('reserva.id')  // select only the primary ID
      ->from('Entities\Reserva2', 'reserva')
       $qb->where('reserva.idRegistroPai IS NULL');
       $qb->andWhere('reserva.idStatus = 92');
      ->getQuery()
      ->getDQL();  // Use the DQL

$linked = $qb->select('rcc')
         ->from('Entities\ReservaCancelamentoContato,''rc')
         ->where($qb->expr()->notIn('rc.id_reserva', $nots))
         ->getQuery()
         ->getResult();
Другие вопросы по тегам