2016-09-25 92 views
1

我有一个使用两个表的过滤器函数的问题。 第一个“eventcheckin-table”用于通过特定事件的预订ID检查客人。因此,它还应该验证ID是否已经签入。尚未签入的ID应作为“实体”字段中的一个选项提供。我试图用以下方式解决这个问题:Symfony2:如何在表单(查询生成器)中使用左连接和isnull?

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的显示此消息

预期类型的​​变量 “学说\ ORM \ QueryBuilder的”,给出 “串”

我该如何解决这个问题?

感谢您的帮助。 ;)

回答

0

,因为我认为,你可以使用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

+0

它工作正常!非常感谢你。你帮了我很多。 :) –

相关问题