планирование между 2 моделями - PullRequest
0 голосов
/ 23 сентября 2019

У меня все еще есть проблема с моим планированием.Моя первая модель Revision со следующей информацией:

дата_представление_старт на 12/09/2019 до 14/09/2019, затем час_старт & hour_end от 07:00 до 09:00 и велосипед 000001.

Ниже у меня нет проблем ...

enter image description here

Теперь, в моей модели Training, если я хочу начать обучение по 14/09/2019 от 10:00 до 12:00 для велосипеда 000001.

У меня есть сообщение об ошибке ??Обычно запись правильная ...

enter image description here

enter image description here

У вас есть идея?для лучшего сравнения мой hour_start & hour_end?

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

$conflictTraining = Training::where('fk_motorbike', $request->get('fk_motorbike'))  
        ->whereDate('date_seance', "=" , $date_seance)  
        ->where('hour_start', "<=" , $request->get('hour_start')) 
        ->where('hour_end', ">=" , $request->get('hour_end'))
        ->where('fk_former', $request->get('fk_former'))
        ->first();  

$conflictRevision = Revision::where('fk_motorbike', $fk_motorbike)
            ->whereDate('date_revision_start', "<=" , $date_seance)
            ->whereDate('date_revision_end', ">=", $date_seance)
            ->first();

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

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

$conflictFormer = Training::where('fk_former', $fk_former)  
            ->whereDate('date_seance', "=" , $date_seance)  
            ->where('hour_start', "<=" , $request->get('hour_start')) 
            ->where('hour_end', ">=" , $request->get('hour_end'))
            ->first();  

$conflictMotorbike = Training::where('fk_motorbike', $fk_motorbike)  
            ->whereDate('date_seance', "=" , $date_seance)  
            ->where('hour_start', "<=" , $request->get('hour_start')) 
            ->where('hour_end', ">=" , $request->get('hour_end'))
            ->first();  

Спасибо за вашу помощь и ваше время.

1 Ответ

1 голос
/ 23 сентября 2019

Причина, по которой у вас появляется сообщение об ошибке конфликта, что мотоцикл находится на доработке, состоит в том, что вы сравниваете только с днями в первом запросе $conflictRevision.В этом первом запросе нет времени, поэтому он сопоставляется с day только для любого заданного часа - таким образом, ВСЕ часы дня потерпят неудачу / будут конфликтовать.

У вас есть три запроса, которые делают похожие вещи:

$conflictRevision = Revision::where('fk_motorbike', $fk_motorbike)
        ->whereDate('date_revision_start', "<=" , $date_seance)
        ->whereDate('date_revision_end', ">=", $date_seance)
        ->first();

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

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

Первый запрос выше - это тот, который вызывает нежелательное сообщение об ошибке.Удалите запрос $conflictRevision, поскольку он будет соответствовать любому времени.Удалите запрос $conflictRevision2, потому что он является дубликатом запроса над ним.Однако вам нужно будет добавить дату окончания к $conflictRevision, иначе она никогда не будет работать.У вас есть открытый конец или дата начала, используя его, как указано выше.При использовании конфликта1, как у вас есть, все в вашей базе данных с ревизией, начинающейся до конфликта $date_seance, так как для этого запроса нет конечной даты):

$conflictRevision1 = Revision::where('fk_motorbike', $fk_motorbike)
    ->whereDate('date_revision_start', "<=" , $date_seance)
    ->whereDate('date_revision_end', ">=" , $date_seance) // <--Note I changed the operator
    ->where('hour_start', "<=" , $request->get('hour_start'))  
    ->where('hour_end', ">=" , $request->get('hour_end'))
    ->first();

И... проблема с ревизией мотоцикла должна быть решена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...