Мне нужно сравнить формат даты с датой.
До 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())'));
Я потерялся, есть идеи?
Просто используйте выражение следующим образом:
$select->where(
array(
new \Zend\Db\Sql\Predicate\Expression("DATE(arrival_date) <= DATE(NOW())")
)
);
Нет необходимости? как ты и пытался. С ? Ваши параметры будут экранированы и не будут работать с выражением. Только с параметрами, такими как PHP datetime или что-то вроде этого.
Протестировано с 2.4.2
Других решений пока нет …