0

Привет, как это сделать в zf2 с zend \ db \ sql?Zend Db Sql Где

Запрос:

SELECT * FROM table WHERE field = $field AND data > SUBDATE(NOW(), INTERVAL 1 DAY) 

В ZF2

$select = $this->sql->select(); 
$select->from(self::MYTABLE) 
      ->where(array('fiels' => $field)) 
      ->where(array('data > ' => 'SUBDATE(NOW(), INTERVAL '.$lifetime.' SECOND')); 
$statement = $this->sql->prepareStatementForSqlObject($select); 
return $statement->execute()->current(); 
+2

Попробуйте '' data '=> new Expression (' SUBDATE (......) ') 'используя [' Zend \ Db \ Sql \ Predicate \ Expression'] (https://github.com/zendframework/zf2 /blob/master/library/Zend/Db/Sql/Predicate/Expression.php#L14) – Sam

+0

Это не работает :( –

+0

Тогда это должно быть 'где (новое выражение ('data> SUBDATE (...)')) '- не слишком безопасно на Zend \ Db, я - ленивая доктрина доктрины: D – Sam

ответ

0

изменение линии

->where(array('data > ' => 'SUBDATE(NOW(), INTERVAL '.$lifetime.' SECOND')); 

в

->where(array('data > ?' => 'SUBDATE(NOW(), INTERVAL '.$lifetime.' SECOND')); 

Из фрагмента кода, он видел, как вы пропустили место держатель для параметра (?), включите вопросительный знак, я упомянул существующую строку кода и модифицированный код для быстрой справки

+0

Просьба указать причину проблемы при ответе на вопросы вместо того, чтобы просто дать решение. Например, почему мне нужно добавить знак вопроса в этот оператор? – edigu

0

Там нет параметра там, так что не нужно быть массивом. Предполагая, что вы знаете, $lifetime является безопасным, целочисленное значение, попробуйте:

->where('data > SUBDATE(NOW(), INTERVAL '.$lifetime.' SECOND)');