2016-09-25 29 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

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

相關問題