Получение крайних случаев datetime с помощью laraval eloquent - PullRequest
0 голосов
/ 17 июня 2020

В настоящее время я создаю систему бронирования для ресторана, и у меня есть вопрос относительно крайних случаев при бронировании. чтобы отфильтровать таблицы, которые недоступны, я пытаюсь получить резервирование и отфильтровать таблицы. например, если бронирование a начинается 17 июня в 11:00 и заканчивается 17 июня в 12:00, вы не сможете забронировать этот стол на этот период времени, однако вы сможете завершить более раннее бронирование в 11:00 и начать новое бронирование в 12:00 для этого стола.

это код, который у меня был в laravel, который сделал это (вроде):

$startDate = $request->query('start_date');
    $endDate = $request->query('end_date');
    $people_amount = $request->query('people_amount');
    $reservation_id = $request->query('reservation_id');

    $tables = Table::all();
    $reservations = Reservation::whereBetween('start_datetime', [$startDate, $endDate])->orWhereBetween('end_datetime', [$startDate, $endDate])->get();

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

 $reservations = Reservation::where([['start_datime', '>', $startDate],
        ['start_datetime', '<', $endDate]
        ])->orWhere([['start_datetime', '>', $startDate],
        ['end_datetime', '>', $startDate]]);

где-то я ошибся, но хоть убей, я не могу понять. любая помощь будет принята с благодарностью!

(это весь код):

public function showTables(Request $request)
    {
        $startDate = $request->query('start_date');
        $endDate = $request->query('end_date');
        $people_amount = $request->query('people_amount');
        $reservation_id = $request->query('reservation_id');

        $tables = Table::all();
       // $reservations = Reservation::whereBetween('start_datetime', [$startDate, $endDate])->orWhereBetween('end_datetime', [$startDate, $endDate])->get();
        //  dd($reservations);
        $reservations = Reservation::where([['start_datetime', '<', $startDate],
        ['start_datetime', '>', $endDate]
        ])->orWhere([['start_datetime', '<', $startDate],
        ['end_datetime', '<', $startDate]])->get();

        if (isset($reservation_id)) {
            $reservations = $reservations->filter(function ($item) use ($reservation_id) {
                return $item->id != $reservation_id;
            });
        }
        //  dd($reservations);

        foreach ($reservations as $key => $reservation) {

            foreach ($tables as $key => $table) {

                if ($table->seats_amount < $people_amount) {
                    unset($tables[$key]);
                }

                if ($table->id === $reservation->table_id) {
                    unset($tables[$key]);
                }
            }
        }

        TableCollection::wrap('tables');
        return new TableCollection($tables);
    }

редактировать, исправление:

 $reservations = Reservation::where([['start_datetime', '>', $startDate],
        ['start_datetime', '<', $endDate]
        ])->orWhere([['end_datetime', '>', $startDate],
        ['end_datetime', '<', $endDate]])->orWhere([['start_datetime', '<', $startDate],
        ['end_datetime', '>', $startDate]])->orWhere([['start_datetime', '=', $startDate],
        ['end_datetime', '=', $endDate]])->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...