У меня такой запрос:
App\Model::where('some', 'condition')->orWhere('some', 'other_condition')->whereBetween('created_at', [request('from'), request('to')])->get();
Почему здесь не работает пункт whereBetween? Вместо того, чтобы возвращать записи между указанными датами, он возвращает все записи.
Вот параметры запроса:
from: 2018-08-14
to: 2018-08-09
Что мне не хватает?






Я думаю, что это делает:
select from blah where some=condition or some=other_condition and created_at between date1 AND date2.
Вы можете запустить DB :: enableQueryLog (); перед запросом print_r (DB :: getQueryLog ()); чтобы увидеть фактический выполняемый запрос.
Может захотеть попробовать
App\Model::
whereBetween('created_at', [request('from'), request('to')])
->where(function($query) {
$query
->where('some', 'condition')
->orWhere('some', 'other_condition')
})->get();
Я думаю, что подойдет
select from blah where created_at between date1 AND date2 and (some=condition or some=other_condition).
Как ваш запрос
App\Model::where('some', 'condition')->orWhere('some', 'other_condition')->whereBetween('created_at', [request('from'), request('to')])->get();
Это было похоже на запрос ниже
SELECT * FROM `table` WHERE `some` = 'text' OR `some` = 'other_text' AND `created_at` BETWEEN 'from' AND 'to'
Таким образом, из этого запроса он вернет все данные, которые имели some = текст или some = другой текст
вам нужно сделать запрос, как показано ниже
SELECT * FROM `table` WHERE (`some` = 'text' OR `some` = 'other_text') AND `created_at` BETWEEN 'from' AND 'to'
Таким образом, он будет проверять между датой и текстом
Вы должны попробовать это:
App\Model::whereRaw('some = condition OR some = other_condition')->whereBetween('created_at', [request('from'), request('to')])->get();
Принял ответ @AlexandruPetrescu. Чтобы оценить ваши усилия, проголосуйте за ваши. Когда-нибудь ваш метод также может оказаться полезным. Но пока я не придерживаюсь подхода
whereRaw.