我实际上有3种形式:
第一个是students
,其中包含两个字段(name, firstname)
。
第二个是trainings
,具有2个字段(date_sitting
,fk_student)。
下一个是表单observations
,其中包含3个字段(title, description, fk_student)
。
我的问题是我可以为同一日期的 1个观察添加 2个日期开会。
是否可以对此类型的案件进行封锁?
到目前为止,这是我的代码的想法:
public function store(Request $request)
{
$request->validate([
'title' => 'required|string|max:30',
'description' => 'required|string|max:80',
'fk_student' => 'required'
]);
$exists = Observation::where('title', $request->get('title'))->where('description', $request->get('description'))->where('fk_student', $request->get('fk_student'))->count();
if (!$exists){
$sittings = Training::where('fk_student', $request->get('fk_student'))->first();
if(!isset($sittings)){ // No payment = block creation and return error msg.
return redirect()->route('observations.index')
->with('error', 'No sitting, no observation for you!');
}
else{
Observation::create($request->all());
return redirect()->route('observations.index')
->with('success', 'new data created successfully');
}
}
if(isset($exists)){
return redirect()->route('observations.index')
->with('error', 'Duplicate ! ');
}
}
谢谢您的帮助。
答案 0 :(得分:1)
当然,您有正确的代码来查看是否已有观察。现在,您只需要检查该学生与观察在同一天是否有坐着。所以:
if (!$exists){
$sitting = Training::where('fk_student', $request->get('fk_student'))
->where('date_sitting', , '=', **SOME formatted DATE**)->first();
if(isset($sitting)){ // If we have a match to student on the requested date, no good, return.
return redirect()->route('observations.index')
->with('error', 'You already have a sitting for this date!');
}
问题是当你说:
我的问题是我可以为同一日期的1个观察值添加2个日期开会。
我不知道“相同日期”是什么日期。与用户通过表格发送以请求坐姿的日期相同?还是在观察上设置日期? IE浏览器,我认为您需要确定要比较的日期-上面的代码中没有输入日期。您需要一个日期进行比较(可能是从馈入$request
方法中注入的store()
对象的用户表单中)进行比较,才能使上面的代码起作用。