count constraint not laravel雄辩的嵌套关系

时间:2016-11-03 11:19:23

标签: php laravel eloquent

我试图将计数约束放在laravel雄辩的嵌套关系上,但它没有按预期工作。

这里的场景是:fetch那些有日期范围的房间的酒店

     $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();

这里它返回了日期范围内不可用的房间(即dateWisepricing im empty collection)

任何帮助,请

1 个答案:

答案 0 :(得分: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表名,但事实上我不知道你如何称呼它们。