Как правильно обрабатывать даты и время? - PullRequest
0 голосов
/ 14 октября 2019

В моей модели Training У меня есть запись.

enter image description here

дата тренинга: 15/09/2019 |час_старт: 18:00 |час_конец: 20:00 |Мотоцикл: 000001

Затем, если у меня есть мотоцикл 000001 в Revision, с 01.09.2009 по 15.09.2009 с 14:00 до 16: 00.

enter image description here

Теперь, если я хочу добавить запись в мою форму Training, например:

enter image description here

дата тренинга: 15.09.2009 |час_старт: 08:00 |час_конец: 10:00 |Мотоцикл: 000001

Обычно мотоцикл находится в ревизии, но здесь я могу добавить ??? Как создать блокировку?

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


        ]);


       $date_seance = Carbon::parse($request->get('date_seance'))->format('Y-m-d');
       $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', "=" , Carbon::parse($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', "<=" ,  Carbon::parse($date_seance)) 
       ->where('hour_start', "<=" , $request->get('hour_start')) 
       ->where('hour_end', ">=" , $request->get('hour_end'))
       ->whereDate('date_revision_end', "<=" ,  Carbon::parse($date_seance))
       ->first();

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

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

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



    }

Я думаю, что моя проблема здесь с часами?

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

Я думаю, что вы заранее.

1 Ответ

1 голос
/ 15 октября 2019

Я не уверен, что ошибка. Ваш код, как написано, похоже, правильно позволяет велосипеду в новой версии пройти новую тренировку. В этой строке:

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

ваш код просит найти любой мотоцикл в ревизии в определенном диапазоне дат и в определенном часовом диапазоне . Согласно скриншоту, приведенному выше, у вас есть велосипед, который требует тренировки 15/9. Обычно это приводит к сообщению о конфликте, так как мотоцикл находится на доработке. Если ваш запрос об этом конфликте был следующим:

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

Проверка if создаст конфликт, так как мотоцикл пересматривается 15/9, а вы хотите еще одну тренировку 15/9. Тем не мение! Вы также включили время в запросе. Мы с тобой знаем, что мотоцикл весь день пересматривается 15/9. Но вы еще более ограничили запрос: «Скажите мне все велосипеды в ревизии 15/9 И только скажите, если они находятся в ревизии между 08:00 и 10:00». Это приводит к отсутствию велосипедов в пересмотре, потому что запрос запросил велосипеды в этот день и в течение этого периода времени в этот день .

Решение 1:

Вы можете сохранить время в запросе, которое будет соответствовать тому, что мы сказали выше - это нормально, чтобы заказать велосипед для обучения, даже еслив этот день он пересматривается, , пока не будет в эти часы .

Решение 2:

Или вы можете удалить время из запроса, как в моем втором коде выше. Это означало бы, что «Велосипед находится на доработке в любое время в течение этого дня, и если это так, заблокируйте тренировку». Этот второй кажется мне более логичным из потока реального мира.

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