Я пытаюсь выполнить запрос, как это:
Select * from table where created_at > DATE_SUB(NOW(), INTERVAL 1 DAY)
в форме запроса модели phalcon. Но я продолжаю получать следующую ошибку:
Синтаксическая ошибка, неожиданный токен INTEGER (1), около ‘DAY)’,
По построению запроса, как показано ниже
$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
Других решений пока нет …