使用SQL函数选择where子句


php zf2 select where clause with SQL function

我需要比较DATE格式和DATETIME。

之前的ZF 2.3.5,以下代码工作正常:

    $select->where('DATE(arrival_date) <= DATE(NOW())');
    $select->where('DATE(departure_date) >= DATE(NOW())');
    $select->where('enable = true');

使用ZF 2.4.2+,它不再工作并产生以下错误:

无法从接口Zend'Db'Sql'Predicate'PredicateInterface继承先前继承的常量TYPE_IDENTIFIER或重写常量TYPE_IDENTIFIER

我已经尝试了以下操作(没有错误)。问题是"arrival_date"是DATETIME格式,我只需要与DATE进行比较。

    $where = new Zend'Db'Sql'Where();
    $where->lessThanOrEqualTo('arrival_date', date('Y-m-d'));
    $where->greaterThanOrEqualTo('arrival_date', date('Y-m-d'));
    $where->equalTo('enable', true);
    $select->where($where);

理想情况下,这段代码应该可以工作,但事实并非如此:

        $select->where(new Zend'Db'Sql'Predicate'Expression('DATE(arrival_time) <= ?', 'DATE(NOW())'));

我迷路了,你知道吗?

就像这样使用Expression:

    $select->where(
        array(
            new 'Zend'Db'Sql'Predicate'Expression("DATE(arrival_date) <= DATE(NOW())")
        )
    );

不需要?就像你一样。?您的参数将被转义,它将无法与表达式一起工作。只能使用参数,比如PHP日期时间之类的。