Как запросить временной интервал между 2 раза в PHP / Laravel - PullRequest
0 голосов
/ 22 сентября 2018

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

Так вот мой запрос

 $result = Appointment::where('user_id', $post['user_id'])
 ->where('appointment_datetime', $post['bookingdate'] )
 ->whereBetween('appointment_time_start', [$begintime, $endtime])
 ->WhereBetween('appointment_time_end', [$begintime, $endtime])->get();


if ($result->isEmpty()) { /// Insert to database ///}

else { /// return back()->with('msg', 1); /// }

Кажется, что если я хочу назначить встречу с 12:00 до13: 00
и у меня встреча в базе данных с 11:00 до 13:00, запрос не обнаруживает ее.

Также, если у меня 12:00 до 14:00, запрос не обнаруживает его.

Может кто-нибудь сказать мне, что не так с моим запросом, большое спасибо!

1 Ответ

0 голосов
/ 22 сентября 2018

Я думаю, вы можете повторить на уровне приложения время назначения на соответствующую дату.

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

$appointments = Appointment::where('user_id', $post['user_id'])
                           ->where('appointment_datetime', $post['bookingdate'])
                            ->get();

$foundFlag = false;
if ($appointments->count() > 0) {
    $beginDate = \Carbon\Carbon::create(date('Y-m-d') . ' ' . $begintime); // You can be add at the end of varible ":00" if not exists
    $endDate = \Carbon\Carbon::create(date('Y-m-d') . ' ' . $endtime); //You can be add at the end of varible ":00" if not exists
    foreach($appointments as $appointment){
        $beginDateForCurrenAppointment = \Carbon\Carbon::create(date('Y-m-d') . ' ' . $appointment->appointment_time_start); // You can be add at the end of varible ":00" if not exists

        $endDateForCurrenAppointment = \Carbon\Carbon::create(date('Y-m-d') . ' ' . $appointment->appointment_time_end); // You can be add at the end of varible ":00" if not exists


        if ($beginDateForCurrenAppointment->between($beginDate, $endDate, true) || $endDateForCurrenAppointment->between($beginDate, $endDate, true) || $beginDate->between($beginDateForCurrenAppointment, $endDateForCurrenAppointment, true) || $endDate->between($beginDateForCurrenAppointment, $endDateForCurrenAppointment, true)) {
            $foundFlag = true;
            break;
        }
    }
}

if (! $foundFlag) {
    // Insert Database
} else {
    /// return back()->with('msg', 1); ///
}

Каждая логика в операторе if означает:

Если существует назначенная просьба встреча между ними, время начала встречи:

$beginDateForCurrenAppointment->between($beginDate, $endDate, true)

Еслизапросить встречу между существующим временем окончания встречи:

$endDateForCurrenAppointment->between($beginDate, $endDate, true)

Если существует встреча между запрошенным временем начала встречи:

$beginDate->between($beginDateForCurrenAppointment, $endDateForCurrenAppointment, true)

Если существует встреча между запрошенным временем окончания встречи:

$endDate->between($beginDateForCurrenAppointment, $endDateForCurrenAppointment, true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...