Я борется с функцией, которая возвращает true
или false
, если DateTime пользователь запрашивает совпадения с любым из DateTime уже в базе данных MYSQL.Возвращает доступность для заданного времени/дат
Ситуация заключается в том, что пользователи могут отправлять запросы на аренду автомобилей через приложение iOS, и оно поставляется в формате DateTime 2014-04-02 08:49:43
. Я использую Laravel в качестве API для управления бэкэнд. Стол для Reservation
является:
Schema::table('reservations', function($table)
{
$table->dateTime('from_date')->nullable();
$table->dateTime('to_date')->nullable();
});
Так что я пробовал много методов, но дату и время резервирования без перекрытия были боли в течение последних 2-х дней. Самое близкое, что я получил, это эта функция, и я думаю (надеюсь), что эта функция правильная, но чего-то не хватает.
public function isSlotAvailable(Request $request) {
$appointments = Reservation::all();
$from = $request->from;
$to = $request->to;
foreach ($appointments as $appointment) {
$eventStart = Carbon::instance(
new DateTime($appointment['dt_start'])
);
$eventEnd = Carbon::instance(
new DateTime($appointment['dt_end'])
)->subSecond(1);
if ($from->between($eventStart, $eventEnd) ||
$to->between($eventStart, $eventEnd) ||
($eventStart->between($from, $to) && $eventEnd->between($from, $to)))
{
return false;
}
}
return true;
}
ошибка, я получаю от этой функции:
вызов функции члена между() на строке
Я бы очень признателен за любую помощь.
Это не работает, есть причина, по которой между проверкой есть. Просто напишите сами, когда и назначение не может быть забронировано. Вы увидите, что есть 3 ситуации: (1) Если назначение начинается раньше всех остальных, но заканчивается между существующим (2) Если назначение заканчивается после всех остальных, но начинается между существующим (3) Если назначение стартеры перед всеми остальными и заканчиваются за всех остальных. Это одно из двух или двух дат от существующей встречи, вы должны заблокировать слот te. Ваш код заботится только о (1) и (2), я думаю. – leo0019
Я дважды проверял это несколько раз - я все еще думаю, что я прав. –
мои даты и время в этом формате '2017-01-02 08: 49: 43', а функция в некоторых случаях неверна – leo0019