Я вчера задал вопрос ( Larvel Eloquent query build select min value ). Из этого я обновляю свой запрос, чтобы выбрать комнаты.
Мой предыдущий запрос:
$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);
Мой обновленный uqery:
$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();