Я пытаюсь выполнить такой запрос:
Select * from table where created_at > DATE_SUB(NOW(), INTERVAL 1 DAY)
в форме запроса модели phalcon. Но я продолжаю получать следующую ошибку:
Синтаксическая ошибка, неожиданный токен INTEGER (1), рядом с "Днем")
По построению запроса, как показано ниже
$donations = Donations::query()
->where('created_at > DATE_SUB(NOW(), INTERVAL 1 DAY)')
->execute();
Приведенный выше код дает мне эту ошибку. Теперь я пробовал как ниже
$donations = Donations::query()
->where('created_at > :holder:')
->bind(["holder" => 'DATE_SUB(NOW(), INTERVAL 1 DAY)'])
->execute();
Хотя эта привязка не дает мне ошибку, она дает мне 0 результат, но у меня есть несколько строк, вставленных в таблицу, чтобы проверить это, и когда я выполняю запрос в phpmyadmin, он работает правильно. Поэтому я предположил, что может существовать сочетание datetime в моей библиотеке phalcon, но когда я изменился с 1 DAY
на 1 MONTH
все еще не получается. Может ли кто-нибудь направить меня на это.
INTERVAL
, DATE_SUB
, NOW()
и другие подобные функции являются только MySQL и не поддерживаются PHQL.
У вас есть два варианта:
1) Перепишите условие WHERE
, используя дату PHP:
$date = date('Y-m-d', strtotime('-1 DAY')); // Modify according to your date format
$donations = Donations::query()
->where('created_at > :holder:')
->bind(["holder" => $date)
->execute();
2) Расширьте MySQL с помощью класса диалектов:
$di->set('db', function() use ($config) {
return new \Phalcon\Db\Adapter\Pdo\Mysql(array(
"host" => $config->database->host,
"username" => $config->database->username,
"password" => $config->database->password,
"dbname" => $config->database->name,
"dialectClass" => '\Phalcon\Db\Dialect\MysqlExtended'
));
});
Дополнительная информация в следующих ссылках:
Как продлить: https://forum.phalconphp.com/discussion/1748/date-sub-interval-mysql#C6291
Сам диалектный класс: https://github.com/phalcon/incubator/blob/master/Library/Phalcon/Db/Dialect/MysqlExtended.php