Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Имею SQL-базу MariaDB Ver 15.1 Distrib 10.1.37-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2.
Есть таблица с полями:
- is_use (тип boolean)
- created_at (стандартное поле timestamp)
Пытаюсь найти в таблице записи, у которых поле is_use=false и время создания более 2-х часов от текущего момента.
Делаю такой запрос:
$result=Article::where('is_use', false)->where('created_at', '<', '(NOW() - INTERVAL 2 HOUR)')->get();
info("Garbage collector for Article is run: ".$result." count ".count($result));
В результате записи не находятся:
Garbage collector for Article is run: [] count 0
Хотя такие записи однозначно есть.
Информация о сконструированном SQL-запросе следующая:
{"query":"select * from `articles` where `is_use` = ? and `created_at` < ?","bindings":[false,"(NOW() - INTERVAL 2 HOUR)"],"time":0.95}
И по-ходу дела запрос получается такой:
select * from `articles` where `is_use` = false and `created_at` < "(NOW() - INTERVAL 2 HOUR)";
То есть, имеются кавычки вокруг выражения времени, и оно воспринимается как строка. Если кавычки убрать, то запрос нормально выполняется.
Но как заставить Eloquent конструировать запрос с выражением времени так, чтобы это выражение не помещалось в кавычки?
Не в сети
Используйте whereRaw или вариации whereDate / whereMonth / whereDay / whereYear / whereTime.
Изменено lodar (13.05.2019 10:21:53)
Не в сети
Топик стартер имеет привычку копировать вопрос сразу на несколько форумов. На него типа коллективный разум Рунета работает ))) и сам он никогда не пишет "вот такое решение найдено: ..." чтобы пополнить общую копилку. Как по мне, это неуважение.
Вот тут всё отвечено давно: https://php.ru/forum/threads/vyborka-za … aet.76608/
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Страницы 1