Адаптируйте мой код, добавив start_time и stop_time в мое бронирование - PullRequest
0 голосов
/ 18 октября 2019

Я должен добавить в мои TrainingController две переменные => start_time & stop_time.

В моем старом коде у меня было следующее:

 $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();

Моя проблемачто я хотел бы сделать проверку. Как я могу избежать дубликата для моего запроса $conflictTraining с start_time & stop_time ..

Вот мой код на данный момент:

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'


        ]);


        $start_time = Carbon::createFromFormat('d-m-Y H:s', $date_seance . ' ' . $hour_start);
        $stop_time = Carbon::createFromFormat('d-m-Y H:s', $date_seance . ' ' . $hour_end);


        $conflictTraining = Training::where('fk_motorbike', $request->fk_motorbike)
            ->where('start_time', "<=", $start_time)
            ->where('stop_time', ">=", $stop_time)
            ->first();


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


        $data = $request->all();
        $data['start_time'] = $start_time;
        $data['stop_time'] = $stop_time;
        Training::create($data);
        return redirect()->route('trainings.index')
            ->with('success', 'Add');


    }

Заранее благодарю заваша помощь.

1 Ответ

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

Если вы спрашиваете, как добавить новое ограничение для пары новых полей базы данных, start_time и stop_time, я думаю, что вы достаточно близки к своему текущему запросу для $conflictTraining.

Вы не указали, в чем заключалась конкретная проблема, но я предполагаю, что эти строки:

$start_time = Carbon::createFromFormat('d-m-Y H:s', $date_seance . ' ' . $hour_start);
$stop_time = Carbon::createFromFormat('d-m-Y H:s', $date_seance . ' ' . $hour_end);

производят что-то, что не соответствует формату в базе данных для start_time и stop_time,Если вы разбиваете то, что создали в этих переменных, вы в основном говорите Carbon создать переменную, которая выглядит примерно так: «15-10-2019 10:00:00» (с оговоркой, что 00 - секунды, а неминут, с тех пор как вы использовали s вместо i).

Итак, ваш первый вопрос должен звучать так: «В моей базе данных хранится время начала в точном формате, который отображается, когда я выгружаю $start_time?»Если нет, запрос никогда не произведет попадание. Конечно, вы можете хранить время начала и окончания в базе данных как дату и время ... но имейте в виду, что вы будете ограничены как датой, так и временем , если вы это сделаете. Другими словами, если вы просто хотите, чтобы время начала составило 10:00 в любой день, это не сработает, потому что база данных хранит 10:00 на определенную дату .

Один из способов решения этой проблемы - сделать это как можно более простым. Если эти времена НЕ связаны с определенной датой и всегда будут в час - сохраните их как простое число. Например, 08 или 22. Тогда вам не нужно использовать Carbon, вы просто сравниваете простые целые числа. Если вы хотите использовать фактическое время (вам может понадобиться 18:20 или что-то в этом роде), это не намного сложнее - вам просто нужно изменить способ хранения и создания времени.

Вы можете поиграть с этим, но общей идеей будет просто сохранить / создать время в согласованном формате между базой данных и тем, что вы создаете из формы. Так что для start_time вы могли бы сэкономить часы и минуты в другом столбце. Или рассчитайте количество минут после полуночи и сохраните как целое число. Или даже сохранить в виде текста и использовать Carbon с обеих сторон, чтобы превратить его в форматированный объект.

Лично мне проще всего работать с целыми числами, поэтому я бы сделал калькулятор (может быть, минуты за полночь) и использовал егопо всей программе, чтобы просто остаться с целыми числами. Есть много способов решить эту проблему - надеюсь, это объяснит вам проблему.

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