поиск даты с laravel не между запросом - PullRequest
3 голосов
/ 04 июля 2019

Я должен искать данные с заданными датами и временем (утром и вечером).Как я могу найти доступные даты из данных с запросом laravel?Если я ищу даты 2019-06-10 до 2019-06-18 .Он должен возвращать только идентификаторы 3 и 4. В этом запросе он возвращает идентификаторы 1, 3 и 4. Что плохого в этом запросе, который он не проверяет между датами?У меня есть столбец типа даты в базе данных для даты начала и окончания.Я хочу проверить два условия

  1. Указанные даты не должны быть равны date_from и date_to
  2. Указанные даты не находятся между этими датами

Оба условияв том же запросе.Надеюсь, вы понимаете.

id  event_id   date_from    date_to   

1     1        2019-06-08   2019-06-12  
2     1        2019-06-14   2019-06-16  
3     2        2019-06-20   2019-06-25  
4     3        2019-07-26   2019-07-27 
$getEvents = Booking::where('category_id', '=', $categoryID)
                ->where('date_from', '!=', $startDate)
                ->where('date_to', '!=', $endDate)
                ->orWhere('date_from', '<', $startDate)
                ->orWhere('date_to', '>', $endDate)
                ->whereNotBetween('date_from', [$startDate,$endDate])
                ->whereNotBetween('date_to', [$startDate,$endDate])
                ->get();

Ответы [ 3 ]

1 голос
/ 04 июля 2019

Предполагая, что $endDate всегда будет больше (или равно), чем $startDate

$startDate = "2019-06-10";
$endDate = "2019-06-18";
Указанные даты не находятся между этими датами
        ->whereDate('date_to', '<', $startDate)
        ->whereDate('date_from', '>', $endDate)

Если дано $startDate больше, чем db 'date_to', $startDate не находится между 'date_to' и 'date_from'.Извлекает записи с 'date_to' меньше "2019-06-10".

И когда заданное 'date_from' больше $endDate, $endDate не находится между 'date_to' и 'date_from'.Будет извлекать записи с 'date_from' больше "2019-06-18".

  1. Указанные даты не должны быть равны date_from и date_to

Это ненеобходимо, так как в запросе пункта 2 мы используем> и <, которые не будут учитывать равные. </p>

    //->where('date_from', '<>', $startDate)->where('date_from', '<>', $endDate)
    //->where('date_to', '<>', $startDate)->where('date_to', '<>', $endDate)

Just:

$getEvents = Booking::where('category_id', '=', $categoryID)
            ->whereDate('date_to', '<', $startDate)
            ->whereDate('date_from', '>', $endDate)
            ->get();
0 голосов
/ 05 июля 2019

Попробуйте это

DB::table('table_name')
    ->whereNotBetween('date', [star_date, end_date])    
    ->get();
0 голосов
/ 05 июля 2019

Ларавел 5

$getEvents = Booking::where('category_id', '=', $categoryID)
                ->where('date_from', '<', $startDate)
                ->where('date_to', '>', $endDate)
                ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...