Symfony2:如何在表单(查询构建器)中使用左连接和isnull?

时间:2016-09-25 09:16:07

标签: php mysql symfony doctrine-orm

我遇到了一个过滤器功能问题,我正在使用两个表。 第一个,eventcheckin-table'用于通过特定活动的预订ID来检查客人。因此,它还应验证ID是否已经签入。尚未签入的ID应在“实体”字段中作为选项提供。我试图通过以下方式解决这个问题:

SELECT booking.booking_id FROM booking LEFT JOIN event_checkin ON  `event_checkin.booking_booking_id = booking.booking_id WHERE` event_checkin.booking_booking_id IS NULL

工作正常。

我对Symfony2表单构建器的解决方案是

->add('bookingBooking', EntityType::class, array (
                                'class' => 'AppBundle:Booking',
                                'query_builder' => function (EntityRepository $er) {
                                 return $er->createQueryBuilder('b')
                                 ->leftjoin('AppBundle:EventCheckin', 'e', 'with', 'e.bookingBooking = b.Id')    
                                 ->expr()->isNull('e.bookingbooking');
                                },
                                'label' => 'Booking-ID: * ',
                                ))

Symfony显示此消息

  

“Doctrine \ ORM \ QueryBuilder”类型的预期参数,“string”给出

我该如何解决这个问题?

感谢您的帮助。 ;)

1 个答案:

答案 0 :(得分:1)

我认为,您可以使用andWhere语句,如:

$er->createQueryBuilder('b')
   ->leftjoin('AppBundle:EventCheckin', 'e', 'with', 'e.bookingBooking = b.Id')
   ->andWhere('e.bookingbooking is null');

或者

$qb = $er->createQueryBuilder('b');

$qb->leftjoin('AppBundle:EventCheckin', 'e', 'with', 'e.bookingBooking = b.Id')
   ->add('where', $qb->expr()->isNull('e.bookingBooking'));

return $qb;

启发this