Laravel 预订和管理

Laravel 预订和管理,laravel,laravel-5,Laravel,Laravel 5,我仍然是一个初学者在拉威尔 摩托车保留用于2019年9月6日8:00至10:00(摩托车编号000001&原Alain) 然后,摩托车000001将始终保留在2019年9月6日,从12:00到14:00,用于前者Alain 我有一条错误消息=>重复/(第一个问题) 2019年9月7日,修订版早上,从08:00到12:00驾驶摩托车000001 如果,我想用摩托车预订2019年9月7日的atraining,从08:00到12:00。它阻止(复制)好的,好的 但是,我总是在2019年9月7日a

我仍然是一个初学者在拉威尔

摩托车保留用于2019年9月6日
8:00
10:00
(摩托车编号
000001
&原
Alain

然后,摩托车
000001
将始终保留在
2019年9月6日
,从
12:00
14:00
,用于前者
Alain

我有一条错误消息=>
重复
/(第一个问题)

2019年9月7日<代码>,
修订版
早上,从
08:00
12:00
驾驶摩托车
000001

如果,我想用摩托车预订2019年9月7日的
a
training
,从
08:00
12:00
。它阻止(复制)好的,好的

但是,我总是在2019年9月7日
a
training
,从
16:00
18:00
驾驶摩托车
000001
。它阻止(复制)同样,这是一个问题(第二个问题)

但问题是,如何管理培训师的管理

我不能有两次同一个导师同时教授一种行为(第三个问题)

编辑2019年9月5日

我现在的代码

public function store(Request $request)
    {
        $request->validate([
                'date_seance' => 'required',
                'hour_start' => 'required',
                'hour_end' => 'required',
                'fk_motorbike' => 'required',
                'fk_former' => 'required'


        ]);


       $date_start = $request->get('date_seance'); 
       $hour_start = $request->get('hour_start'); 
       $hour_end = $request->get('hour_end'); 
       $fk_motorbike = $request->get('fk_motorbike');
       $fk_former = $request->get('fk_former');


        $conflictTraining = Training::where('fk_motorbike', $fk_motorbike)  // Bike is conflicted?
        ->whereDate('date_seance', "=" , $date_start)  // Same day?
        ->where('hour_start', "<=" , $request->get('hour_start'))  // Within same time slot?
        ->where('hour_end', ">=" , $request->get('hour_end'))
        ->where('fk_former', $request->get('fk_former')) // Same trainer as requested?
        ->where('fk_motorbike', $request->get('fk_motorbike')) 
        ->first();  

        $conflictRevision = Revision::where('fk_motorbike', $fk_motorbike)
        ->whereDate('date_revision_start', "<=" , $date_start)
        ->whereDate('date_revision_end', ">=", $date_start)
        ->where('hour_start', "<=" , $request->get('hour_start'))  
        ->where('hour_end', ">=" , $request->get('hour_end'))
        ->first();  

        if(isset($conflictTraining) || isset($conflictRevision)){
            return redirect()->route('trainings.index')
                 ->with('error', 'Duplicate ');
        }

        else{
            Training::create($request->all());
                return redirect()->route('trainings.index')
                    ->with('success', 'Add');
    }



    }

提前感谢您的帮助和解释。

您可以使用类似的逻辑检查培训、培训师和修订的副本

培训

因为培训是在同一天进行的,所以您可以查看是否在同一天以及在用户从表单中请求的相同时间范围内进行了培训。在同一查询中,您还可以检查请求的培训师是否参加该培训,以及该特定摩托车是否是计划参加培训的摩托车:

 $conflictTraining = Training::where('fk_motorbike', $fk_motorbike)  // Bike is conflicted?
        ->whereDate('date_seance', "=" , $date_seance)  // Same day?
        ->where('hour_start', "<=" , $request->get('hour_start'))  // Within same time slot?
        ->where('hour_end', ">=" , $request->get('hour_end'))
        ->where('fk_former', $request->get('fk_former')) // Same trainer as requested?
        ->first();
$conflictRevision = Revision::where('fk_motorbike', $fk_motorbike)
        ->whereDate('date_revision_start', "<=" , $date_start)
        ->whereDate('date_revision_end', ">=", $date_start)
        ->where('hour_start', "<=" , $request->get('hour_start'))  
        ->where('hour_end', ">=" , $request->get('hour_end'))
        ->first();
现在,您已经有了与您的用户日相匹配的修订版,您可以查看用户要求的特定培训时间是否在此修订版中。最困难的部分,也是你需要在你的工作流程逻辑中决定的一点是,你是否假设如果它在修订中持续了几个小时,那么它总是只在修订中持续一天?如果是这样,您可以使用与培训类似的子句来扩充上述查询:

 $conflictTraining = Training::where('fk_motorbike', $fk_motorbike)  // Bike is conflicted?
        ->whereDate('date_seance', "=" , $date_seance)  // Same day?
        ->where('hour_start', "<=" , $request->get('hour_start'))  // Within same time slot?
        ->where('hour_end', ">=" , $request->get('hour_end'))
        ->where('fk_former', $request->get('fk_former')) // Same trainer as requested?
        ->first();
$conflictRevision = Revision::where('fk_motorbike', $fk_motorbike)
        ->whereDate('date_revision_start', "<=" , $date_start)
        ->whereDate('date_revision_end', ">=", $date_start)
        ->where('hour_start', "<=" , $request->get('hour_start'))  
        ->where('hour_end', ">=" , $request->get('hour_end'))
        ->first();
$conflictRevision=Revision::where('fk_motorbike',$fk_motorbike)
->whereDate('date\u revision\u start',“=”,$date\u start)
->其中('hour\u start',“=”,$request->get('hour\u end'))
->第一个();
如果用户可以在8:00-11:00的时间段“懒洋洋地”输入修订,但您允许多天的时间,那么这不会每次都有效,从逻辑角度来看也没有意义(如果您在1月24日至30日输入8:00-11:00,那么哪一天在车库?)。如果您允许多天且仅允许几个小时,我不确定您是否能够可靠地为该检查编写代码。如果在开始和结束之间有多天,没有简单的方法可以检查时间是否在
seance
的特定日期


如果可能的话,当每小时进行一次修订时,将用户限制在一天内进行修订可能会更方便。

您可以使用类似的逻辑检查培训、培训师和修订的副本

培训

因为培训是在同一天进行的,所以您可以查看是否在同一天以及在用户从表单中请求的相同时间范围内进行了培训。在同一查询中,您还可以检查请求的培训师是否参加该培训,以及该特定摩托车是否是计划参加培训的摩托车:

 $conflictTraining = Training::where('fk_motorbike', $fk_motorbike)  // Bike is conflicted?
        ->whereDate('date_seance', "=" , $date_seance)  // Same day?
        ->where('hour_start', "<=" , $request->get('hour_start'))  // Within same time slot?
        ->where('hour_end', ">=" , $request->get('hour_end'))
        ->where('fk_former', $request->get('fk_former')) // Same trainer as requested?
        ->first();
$conflictRevision = Revision::where('fk_motorbike', $fk_motorbike)
        ->whereDate('date_revision_start', "<=" , $date_start)
        ->whereDate('date_revision_end', ">=", $date_start)
        ->where('hour_start', "<=" , $request->get('hour_start'))  
        ->where('hour_end', ">=" , $request->get('hour_end'))
        ->first();
现在,您已经有了与您的用户日相匹配的修订版,您可以查看用户要求的特定培训时间是否在此修订版中。最困难的部分,也是你需要在你的工作流程逻辑中决定的一点是,你是否假设如果它在修订中持续了几个小时,那么它总是只在修订中持续一天?如果是这样,您可以使用与培训类似的子句来扩充上述查询:

 $conflictTraining = Training::where('fk_motorbike', $fk_motorbike)  // Bike is conflicted?
        ->whereDate('date_seance', "=" , $date_seance)  // Same day?
        ->where('hour_start', "<=" , $request->get('hour_start'))  // Within same time slot?
        ->where('hour_end', ">=" , $request->get('hour_end'))
        ->where('fk_former', $request->get('fk_former')) // Same trainer as requested?
        ->first();
$conflictRevision = Revision::where('fk_motorbike', $fk_motorbike)
        ->whereDate('date_revision_start', "<=" , $date_start)
        ->whereDate('date_revision_end', ">=", $date_start)
        ->where('hour_start', "<=" , $request->get('hour_start'))  
        ->where('hour_end', ">=" , $request->get('hour_end'))
        ->first();
$conflictRevision=Revision::where('fk_motorbike',$fk_motorbike)
->whereDate('date\u revision\u start',“=”,$date\u start)
->其中('hour\u start',“=”,$request->get('hour\u end'))
->第一个();
如果用户可以在8:00-11:00的时间段“懒洋洋地”输入修订,但您允许多天的时间,那么这不会每次都有效,从逻辑角度来看也没有意义(如果您在1月24日至30日输入8:00-11:00,那么哪一天在车库?)。如果您允许多天且仅允许几个小时,我不确定您是否能够可靠地为该检查编写代码。如果在开始和结束之间有多天,没有简单的方法可以检查时间是否在
seance
的特定日期


如果可能的话,当每小时进行一次修订时,将用户限制在一天内进行修订可能会更方便。

@Ken,在我重新阅读问题之前,我也有同样的想法。它的措辞不好,因为英语显然是他/她的第二语言,但他所寻找的是一个单一问题的解决方案,“我如何确定这件事在我的xxx方法中是否冲突”。如果这不是一个合理的问题,我就不会花时间来回答,而我在整理一点混乱的逻辑时可能会遇到这个问题。@Watercayman:谢谢。评论和简历被删除。@Ken,我一直在想同样的事情,直到我重新阅读这个问题。它的措辞不好,因为英语显然是他/她的第二语言,但他所寻找的是一个单一问题的解决方案,“我如何确定这件事在我的xxx方法中是否冲突”。如果这不是一个合理的问题,我就不会花时间来回答,而我在整理一点混乱的逻辑时可能会遇到这个问题。@Watercayman:谢谢。删除评论和简历。你好,Watercayman,非常感谢您的帮助