PHP - Laravel:如何在数据库中保存时间而不重叠
Posted
技术标签:
【中文标题】PHP - Laravel:如何在数据库中保存时间而不重叠【英文标题】:PHP - Laravel : How to save without time overlapping in DB 【发布时间】:2016-05-03 05:03:19 【问题描述】:我有一种情况,用户将在数据库中保存时间间隔意味着计划不会影响其他时间。
例如:如果教室已经预订了上午 7:00 至上午 8:00,则用户不能 保存该时间之间的时间意味着用户无法保存 7:30 到 8:30 或 在那个时间间隔内。
如何查看时间间隔并在 laravel 中保存时间?
这是我的控制器:
public function postAllocateRoom(Request $request)
$classRoom = new ClassRoom();
$classRoom->department_id=$request->Input(['department_id']);
$classRoom->room_id=$request->Input(['room_id']);
$classRoom->course_id=$request->Input(['course_id']);
$classRoom->day_id=$request->Input(['day_id']);
$classRoom->start=$request->Input(['start']);
$classRoom->end=$request->Input(['end']);
$classRoom->save();
return redirect('allocateRoomPage');
我的数据库中有 two
列,名称为 start
和 end
类型:Time
【问题讨论】:
您应该使用 javascript 或 jQuery 来实现此功能。只需从视图中的下拉菜单中隐藏使用的特定时间。 你能给我推荐一个吗?我搜索了但找不到任何有用的东西。 【参考方案1】:如果你想在服务器端检查它,你应该向数据库发出额外的请求以检查时间。
$startTime = Carbon::parse($request->input('start'));
$endTime = Carbon::parse($request->input('end'));
$classRoomCount = ClassRoom::where(function ($query)
$query->where('start', '>=', $startTime)
->where('end', '<=', $startTime);
)->orWhere(function ($query)
$query->where('start', '>=', $endTime)
->where('end', '<=', $endTime);
)->count();
if ($classRoomCount > 0)
echo 'Clas-s-room is already booked';
【讨论】:
我应该检查时间而不是日期。是的,我想检查已经保存的数据库! 您使用什么格式存储开始和结束时间? 只需尝试使用数据库中已保存的数据检查起点和终点。见例子。【参考方案2】:您可以在保存时检查是否采用了间隔,此外,您还可以预先提取现有的间隔以呈现在客户端。
【讨论】:
以上是关于PHP - Laravel:如何在数据库中保存时间而不重叠的主要内容,如果未能解决你的问题,请参考以下文章
在 PHP Laravel 5.x 中编辑后如何保存以前的 MySQL 字段条目?