У меня есть модель гостиницы , в которой много комнат , которые можно занять . Как мне запросить это:

Список отелей

  • количество комнат
  • количество занятых комнат

Запрос:

$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 в комнате?

6
error500 8 Сен 2016 в 10:14

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();
5
jaysingkar 8 Сен 2016 в 11:27
$hotels = Hotel::where('foo',$bar)
->withCount('rooms AS rooms_count')
->withCount(['rooms AS occupied_rooms_count' => function ($query) {
    $query->where('status', 'Occupied');
    }])
->get();
-1
xayer 20 Июн 2019 в 13:36