我有一个酒店模型,有许多房间可以占用.我应该如何查询:
酒店列表
查询:
$hotels = Hotel::where('foo',$bar)
->withCount('rooms')
->withCount(['rooms' => function ($query) {
$query->where('status', 'Occupied');
}])
->get();
Run Code Online (Sandbox Code Playgroud)
结果 :
$hotel->rooms_count给出占用房间的数量,这是最后一个withCount表达式.
我想要得到什么
$hotel->rooms_count 作为每个酒店的客房数量
$hotel->occupied_rooms_count 作为每个酒店的占用房间数
作为第二个的别名withcount:
题
有没有一种方法,以别名第二withCount的房?
Pau*_*tas 14
虽然@jaysingkar的答案是一个很好的方法,但很好地回答了这个问题,是的,虽然尚未记录,但是可以为一个withCount()调用添加别名:
$hotels = Hotel::where('foo', $bar)
->withCount([
'rooms',
'rooms AS occupied_rooms' => function ($query) {
$query->where('status', 'Occupied');
}
])
->get();
Run Code Online (Sandbox Code Playgroud)
这将为您$hotel->occupied_rooms_count提供每个酒店的占用房间数.:)
可以在这里看到这种魔法发生的代码.它是通过PR#15279在Laravel 5.3.7中添加的.
更新:我已经提交了PR,现在已经正确记录了.:)
而不是where在您withCount定义Hotel模型中占用房间的关系中指定子句。
public function occupied_rooms(){
return $this->hasMany(Room::class)
->where('status', 'Occupied');
}
Run Code Online (Sandbox Code Playgroud)
现在,在您的控制器中使用withCount('occupied_rooms').
$hotels = Hotel::where('foo',$bar)
->withCount(['rooms','occupied_rooms'])
->get();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1544 次 |
| 最近记录: |