Laravel:如何避免时间重叠?
Posted
技术标签:
【中文标题】Laravel:如何避免时间重叠?【英文标题】:Laravel : how to avoid time overlapping? 【发布时间】:2016-05-12 17:09:25 【问题描述】:我正在构建一个 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=Carbon::parse(str_replace(array('am', 'pm'), ':00', $request->input('start')));
$classRoom->end=Carbon::parse(str_replace(array('am', 'pm'), ':00', $request->input('end')));
$day = $classRoom->day_id;
$startTime=$classRoom->start;
$endTime=$classRoom->end;
$result=DB::select( DB::raw("SELECT * FROM `allocate_rooms`
WHERE start='$startTime' AND end='$endTime' AND day_id='day'"));
if (sizeof($result)>0)
flash()->error('Class Room Already Taken.');
return redirect('allocateRoomPage');
else
$classRoom->save();
flash()->success('Successfully allocated room.');
return redirect('allocateRoomPage');
首先在我的控制器的查询中,我将检查作为输入给出的 day_id 是否与具有该 day_id 的数据库匹配,然后它会检查时间,如果匹配,结果将超过一个,所以它可以' t 让用户保存输入,否则如果查询失败,它将让用户保存数据。
我遇到了查询问题。如果有人帮助找出解决方案。
【问题讨论】:
那么查询有什么问题呢?你能发布确切的错误信息吗? 【参考方案1】:首先,我建议您在创建模型实例之前对您的输入执行一些validations。
然后,我不明白为什么你有时使用$request->Input(['input_name'])
,有时使用$request->input('input_name')
,最好使用第二种语法。
我编辑了你的代码,请测试一下,它应该可以工作。
public function postAllocateRoom(Request $request)
// SOME VALIDATION HERE BEFORE GO ON, PLEASE
$startTime = Carbon::parse(str_replace(array('am', 'pm'), ':00', $request->input('start')));
$endTime = Carbon::parse(str_replace(array('am', 'pm'), ':00', $request->input('end')));
$dayId = $request->input('day_id');
$timeExists = AllocateRooms::where('day_id', $dayId)
->where('start', $startTime)
->where('end', $endTime)
->exists(); //use allocate_rooms table model (I don't know if it is ClassRomm)
if($timeExists)
reuturn redirect('allocateRoomPage')->withErrors(['time' => 'Class Room Already Taken']);
$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=$dayId;
$classRoom->start=$startTime;
$classRoom->end=$endTime;
$classRoom->save();
$request->session()->flash('success', 'Successfully allocated room');
return redirect('allocateRoomPage');
【讨论】:
以上是关于Laravel:如何避免时间重叠?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 使用 QueryBuilder 时如何避免页面重新加载