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 列,名称为 startend 类型: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 字段条目?

如何从laravel route post将数据保存到mysql数据库中

如何在 PHP Laravel Web 服务中获取照片路径

如何获取 Laravel 中所有模型的列表?

我如何在 laravel 中调用 ajax 文件

如何使用laravel保存所有行数据每个行名或相等