【问题标题】:Phalcon datetime in model query error模型查询错误中的 Phalcon 日期时间
【发布时间】:2017-12-25 21:20:57
【问题描述】:

我正在尝试执行这样的查询:

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 中执行查询时它工作正常,所以我假设可能有我的 phalcon 库设置中的日期时间混淆了,但是当我从 1 DAY 更改为 1 MONTH 时仍然没有结果。有人可以指导我吗?

【问题讨论】:

  • 我没有使用 phalcon 框架,但基于其他框架,我认为这与 where 函数需要知道它是本机 sql 功能这一事实有关。尝试类似 ->where(new RawValue('created_at > DATE_SUB(NOW(), INTERVAL 1 DAY)'))

标签: php mysql datetime phalcon phalcon-orm


【解决方案1】:

INTERVALDATE_SUBNOW() 和其他类似功能是 MySQL 独有的功能,PHQL 不支持。

你有两个选择:

1) 使用 PHP 日期重写 WHERE 条件:

$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

【讨论】:

  • 我会坚持使用php date 函数。干杯!
猜你喜欢
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
  • 2013-04-20
  • 2018-01-09
  • 1970-01-01
  • 1970-01-01
  • 2018-03-20
  • 1970-01-01
相关资源
最近更新 更多