Laravel Eloquent запрос сборки выберите минимальное значение

0

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

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

        $buildquery->Where('astatus', 1)->Where('status', 0);

        $rooms = $buildquery->simplePaginate(20);

Фактический запрос (не обрезается):

select 'rooms'.*, 
(select count(*) from 'amenities' inner join 'amenities_room' on 'amenities'.'id' = 'amenities_room'.'amenities_id' where 'rooms'.'id' = 'amenities_room'.'room_id' and 'amenities_id' in (?)) as 'amenities_count' 
from 
'rooms' 
where 'city' = ? and 'price' between ? and ? and 'astatus' = ? and 'status' = ? having 
'amenities_count' = ? 
limit 21 offset 100

В нем перечислены все номера, доступные в отеле. Мне нужно выбрать только одну комнату для одного отеля с наименьшей ценой.

Теги:
eloquent
laravel-5.5

2 ответа

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

Вы можете сделать что-то подобное, чтобы получить структуру вроде:

{
    'Hotel': {
        'Room': {
            'Images': {
                //
            },
            'roomTypes': {
                //
            },
            'amenities': {
                //
            }
        }
    }
}

Это то, что вы хотите?

  • 0
    Это выглядит многообещающе, позвольте мне попробовать это
  • 0
    Скучаю по открытой квадратной скобке. Hotel :: with (['room' => function ($ query) {
Показать ещё 2 комментария
0

Вы можете use order by

$buildquery->orderBy('COL_NAME', 'DESC')->get();

если вам нужен только один, вы можете использовать take(1)

  • 0
    Ваш запрос дает всего один результат. Примечание: у меня много отелей (в каждом отеле много номеров)
  • 0
    Так что, если я вас правильно понимаю. Вы хотите самые дешевые номера для каждого отеля, который у вас есть. Чем лучше установить отношения из модели отеля и сделать запрос, например, Hotel::with('room' => function($query) { $query->orderBy('price', 'asc')->first(); }]) ->get();
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню