WhereBetween не работает с датами, как ожидалось

У меня такой запрос:

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

Что мне не хватает?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
139
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я думаю, что это делает:

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.

Tanmay 21.08.2018 08:17

Другие вопросы по теме