У меня есть модель гостиницы , в которой много комнат , которые можно занять . Как мне запросить это:
Список отелей
- количество комнат
- количество занятых комнат
Запрос:
$hotels = Hotel::where('foo',$bar)
->withCount('rooms')
->withCount(['rooms' => function ($query) {
$query->where('status', 'Occupied');
}])
->get();
Результат :
$hotel->rooms_count
дает количество занятых комнат, которое является последним выражением withCount
.
Что я пытаюсь получить
$hotel->rooms_count
как количество номеров в каждой гостинице$hotel->occupied_rooms_count
как количество занятых номеров в каждой гостинице
Как псевдоним второго withcount
:
Вопрос
Есть ли способ присвоить псевдониму второму withCount
в комнате?
2 ответа
Вместо указания предложения where
в вашем withCount
определите отношение для занятых комнат в модели Hotel
.
public function occupied_rooms(){
return $this->hasMany(Room::class)
->where('status', 'Occupied');
}
Теперь в вашем контроллере используется withCount('occupied_rooms')
.
$hotels = Hotel::where('foo',$bar)
->withCount(['rooms','occupied_rooms'])
->get();
$hotels = Hotel::where('foo',$bar)
->withCount('rooms AS rooms_count')
->withCount(['rooms AS occupied_rooms_count' => function ($query) {
$query->where('status', 'Occupied');
}])
->get();
Похожие вопросы
Связанные вопросы
Новые вопросы
laravel
Платформа Laravel — это веб-инфраструктура PHP с открытым исходным кодом, которая позволяет разработчикам создавать динамические и масштабируемые веб-приложения. Исходный код Laravel размещен на GitHub и выпущен под лицензией MIT.