php zf2 выберите пункт where с функцией SQL

Мне нужно сравнить формат даты с датой.

До 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+ он больше не работает и выдает следующую ошибку:

Невозможно наследовать ранее унаследованную или переопределенную константу TYPE_IDENTIFIER из интерфейса Zend \ Db \ Sql \ Predicate \ PredicateInterface

Я попробовал следующее (без ошибок). Проблема заключается в том, что «date_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())'));

Я потерялся, есть идеи?

0

Решение

Просто используйте выражение следующим образом:

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

Нет необходимости? как ты и пытался. С ? Ваши параметры будут экранированы и не будут работать с выражением. Только с параметрами, такими как PHP datetime или что-то вроде этого.

Протестировано с 2.4.2

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]