2016-11-03 78 views
1

我試圖把計數約束laravel雄辯的嵌套關係,但它沒有按預期工作。計數約束不工作laravel雄辯嵌套關係

這裏的情況是:取酒店那些有客房,日期範圍內都可以

 
    $hotels = Hotel::where('destination_id', $destinationId) - > with(['rooms' = > function ($query) use($totalNights, $check_in, $check_out) { 
     $query - > with([ 
         'dateWisePricing' = > function ($dateWisePricing) use($check_in, $check_out) { 
       $dateWisePricing - > where('date', '>=', $check_in); 
       $dateWisePricing - > where('date', '<', $check_out); 
       $dateWisePricing - > orderBy('date'); 
          } 
         ]); 
     $query - > has('dateWisePricing', '>=', $totalNights); 
        } 
        ]) - > has('rooms.dateWisePricing') - > get(); 

這裏它返回的客房,是在該日期範圍avuable(即dateWisepricing IM空集)

任何請幫助

回答

0

最好使用whereHas而不是隻查詢with方法。但是,最好的選擇是查詢出來與加入這樣的:

$hotels = Hotel::select('hotels.*') 
    ->with(['rooms.dateWisePricing' => function ($dateWisePricing) { 
     $dateWisePricing - > orderBy('date'); 
    }]) 
    ->join('rooms', 'rooms.hotel_id', '=', 'hotels.id') 
    ->join('date_wise_pricings', 'date_wise_pricings.id', '=', 'rooms.date_wise_pricing_id') 
    ->where('date_wise_pricings.date', '>=', $check_in) 
    ->where('date_wise_pricings.date', '<', $check_out) 
    ->where('destination_id', $destinationId) 
    ->groupBy('hotels.id') 
    ->get(); 

這種方法將查詢出所有無法使用的記錄。 hotelsroomsdate_wise_pricings表的名字,但其實我不知道你怎麼稱呼他們:

注意

,我使用求佛。

+0

dayWisePricing是在房間的關係不是酒店的 – kamalakar

+0

是的,我已經重新編輯我進入 –

+0

請你解釋一下它是如何從我前面的代碼不同,因爲它返回相同的結果和約束,也沒有工作,因爲它 – kamalakar