Laravel Eloquent отношение один ко многим, динамическое добавление запроса в связанную таблицу

arun спросил: 26 ноября 2017 в 04:41 в: php

Вчера я задал вопрос здесь ( Laravel Eloquent для построения запроса выберите минимальное значение ). После этого я обновляю свой запрос, чтобы выбрать комнаты.

Мой предыдущий запрос:

$buildquery=Room::        with(['hotel' => function ($query) {
            $query->where('status', 0);
        }])        ->with('image')->with('amenities');        if ($request->filled('location_id')) {            $buildquery->Where('city', $request->location_id);
            //print_r($request->location_id);
        }        // If amenities is there add it to query
        if($request->filled('amenities')){
            $amenities = $request->amenities;
            $count = count($amenities);            $buildquery->withCount(['amenities' => function($query) use ($amenities){
                            $query->whereIn('amenities_id', $amenities);
                        }])
                        ->having('amenities_count', $count);
        }        // If price is there add it to query
        if ($request->filled('min_price')) {
            $buildquery->whereBetween('price', [$request->min_price, $request->max_price]);    
        }        $buildquery->Where('astatus', 1)->Where('status', 0);        //$buildquery->orderBy('price', 'DESC')->take(1);        $rooms = $buildquery->simplePaginate(20);

Мой обновленный запрос:

$rooms = Hotel::with(['room' => function($query) {
            $query->orderBy('price', 'asc')->first();
        },
        'room.image',
        'room.amenities'])
        ->get();

Я столкнулся с одной проблемой. Если пользователь выбирает удобства, то только я включаю следующий запрос:

if($request->filled('amenities')){
                $amenities = $request->amenities;
                $count = count($amenities);                $buildquery->withCount(['amenities' => function($query) use ($amenities){
                                $query->whereIn('amenities_id', $amenities);
                            }])
                            ->having('amenities_count', $count);
            }

Как я могу добавить это в свой обновленный запрос?,

Пробовал таким образом, но не повезло

$rooms = Hotel::with(['room' => function($query) {
            $query->orderBy('price', 'asc')->first();
        },
        'room.image',
        'room.amenities' => function($query) {
            $query->withCount(['amenities' => function($query) use ($amenities){
                            $query->whereIn('amenities_id', $amenities);
                        }])
                        ->having('amenities_count', $count);
        }])->get();

0 ответов