Laravel Eloquent несколько операторов И / ИЛИ - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь получить продукты из этой базы данных, которые либо попадают в определенный диапазон дат, либо имеют значение NULL. Кроме того, продукты должны , а не были приобретены ранее.

Мой запрос:

$offerings = Offering::with(['items' => function($query) use ($purchased, $dt) {
            $query->whereNotIn('offering_items.id', $purchased)
                  ->whereDate('offering_items.start_date', '<=', $dt->toDateString())
                  ->whereDate('offering_items.end_date', '>=', $dt->toDateString())
                  ->orWhereNull('offering_items.start_date')
                  ->orWhereNull('offering_items.end_date');
        }])->get();

Структура таблицы: enter image description here

Таблица: enter image description here

В результате этого запроса выводятся все записи из базы данных.

Я не вижу, что я делаю не так.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Этот код в конечном итоге получил желаемые результаты:

$offerings = Offering::with(['items' => function($query) use ($purchased, $dt) {
            $query->where(function($query) use ($purchased) {
                $query->whereNotIn('offering_items.id', $purchased);
            })->where(function($query) use ($dt) {
                $query->whereDate('offering_items.start_date', '<=', $dt->toDateString())
                      ->orWhereNull('offering_items.start_date');   
            })->where(function($query) use ($dt) {
                $query->whereDate('offering_items.end_date', '>=', $dt->toDateString())
                ->orWhereNull('offering_items.end_date');
            });
            }])->get();
0 голосов
/ 15 января 2019

Попробуйте сгруппировать wheres, как показано ниже:

Offering::with(['items' => function($query) use ($purchased, $dt) {
    $query->where(function($query){
    $query->whereNull('start')->orWhereNull('end');
})->orWhere(function($query){
    $query->whereDate('offering_items.start_date', '<=', $dt->toDateString())->whereDate('offering_items.end_date', '>=', $dt->toDateString())
})->whereNotIn('offering_items.id', $purchased)
}])->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...