【发布时间】:2019-03-15 01:43:28
【问题描述】:
我正在开发一个酒店预订系统,用户/管理员可以选择多个房间进行预订。
我在edit 功能中遇到问题。我正在寻求有关如何解决此问题的帮助和建议。
我的架构。
房间:
room_number
price
reserved (Boolean)
maintenance (Boolean)
预订:
customer_id
checkin
checkout
Reservation_Room
room_id
reservation_id
TotalPrice
房间的查询范围:
public function scopeIsNotReserved($query)
{
return $query->where('reserved', false);
}
关系预留模型:
public function rooms()
{
return $this->belongsToMany(Room::class);
}
实际的问题是。
我不能在编辑预订时使用IsNotReserved query scope,因为它不会将值传递给选定的选项。
除了这个reservation_id(见$roomId)之外,我想通过所有没有预订的房间。
我的控制器编辑功能如下所示:
$reservation = Reservation::findOrFail($id);
$customers = Customer::pluck('name', 'id')->toArray();
// 目前没有对这个查询做任何事情。
$roomId = $reservation->rooms()->pluck('rooms.id')->toArray();
获取所有房间
$rooms = Room::IsNotOnMaintenance()->get();
【问题讨论】:
-
我不明白你想做什么,你能说得清楚一点吗?
-
我正在传递需要从预订表格中选择的房间。当保存该表单时,三行受到影响或变异。进行预订时,预订的房间更新为 true,预订表与 reservation_room 一起创建。添加新预订时一切正常。现在我想编辑这个预订。仅列出未预订的房间。我想传递所有未保留的房间,除了我选择或过滤的房间,在这种情况下,针对这些 id 的 $roomId = $reservation->rooms()->pluck('rooms.id')->toArray ();
-
如果我理解正确,您想获得所有未预订的房间,然后过滤掉
$roomId中的那些房间吗?你可以试试这个:Room::IsNotReserved()->except($roomId) -
#Remul 调用未定义的方法 Illuminate\Database\Eloquent\Builder::except()
-
抱歉,您必须在集合上使用它:
Room::IsNotReserved()->get()->except($roomId);如果您想在查询生成器上使用它,您可以使用:Room::IsNotReserved()->whereNotIn('id', $roomId)->get();
标签: laravel laravel-5 eloquent query-builder laravel-query-builder