如何验证在Laravel id_room是不可用的,当书表有1 id房间在同一天



当books表在同一天有1 id room时,我被困在验证id_room。

我用这个是因为酒店有2个接待员

$request->validate([
'id_room' => ['required', 'integer', Rule::unique('books')->where(function ($query) use ($request) {
return
$startDate = date('Y-m-d');
$hotelId =
Auth::user()->id_hotel;
$query->where('id_room', $request->id_room)->whereDate('book_date', $startDate)->where('id_hotel', $hotelId);
})],
'guestname' => ['required', 'string', 'max:255'],
'nik' => ['required', 'string', 'max:255'],
'nota' => ['required', 'string', 'max:255'],
'price' => ['required', 'integer'],
]);

我认为你当前的查询是好的。只是返回值是$startDate

尝试返回查询,并更改使用whereDate

的方式
'id_room' => ['required', 'integer', Rule::unique('books')
->where(function ($query) use ($request) 
{
return $query
->where('id_room', $request->id_room)
->whereDate('book_date', '=', date('Y-m-d'))
->where('id_hotel', auth()->user()->id_hotel);
})
],

*根据您的评论额外说明:*
与book_date和保持2个接待员无法预订相同的id_room有关,我认为仅此验证是不够的。
最好在插入事务
之前添加额外的检查代码,并在相同的入住和退房日期(或两者之间)预订相同的id_room时使用DB事务返回

最新更新