Есть ли способ включить выражения MySQL, такие как NOW () в текущую сборку ZF2 (2.0.0beta4), посредством операторов Zend \ Db и / или TableGateway insert () / update ()?
Вот связанный пост в списке рассылки, хотя на него не ответили: http://zend-framework-community.634137.n4.nabble.com/Zend-Db-Expr-and-Transactions-in-ZF2- Db-td4472944.html
Похоже, что ZF1 использовал что-то вроде:
$data = array( 'update_time' => new \Zend\Db\Expr("NOW()") );
И после просмотра Zend \ Db \ Sql \ Expression я попытался:
$data = array( 'update_time' => new \Zend\Db\Sql\Expression("NOW()"), );
Но получите следующую ошибку:
Catchable fatal error: Object of class Zend\Db\Sql\Expression could not be converted to string in /var/www/vendor/ZF2/library/Zend/Db/Adapter/Driver/Pdo/Statement.php on line 256
Как рекомендуется здесь: http://zend-framework-community.634137.n4.nabble.com/ZF2-beta3-Zend-Db-Sql-Insert-new-Expression-now-td4536197.html Я сейчас просто устанавливаю дата с PHP-кодом, но я предпочел бы использовать сервер MySQL как единственный источник истины для даты / времени.
$data = array( 'update_time' => date('Ymd H:i:s'), );
Спасибо, я ценю любой вход!
Я не уверен, исправили ли они это в последних обновлениях, но это была ошибка с ошибкой, и даже если они сказали, что она исправлена, для меня это все еще не работает после исправления.
Zend_Db_Sql_Expression работает для меня сейчас.
$data = array( 'update_time' => new \Zend\Db\Sql\Expression("NOW()"), );
Это работает и для меня. Возможно, ваша проблема была похожа на мою. Преобразование строковой ошибки состояло в том, что параметр, который я передал методу, был элементом массива, а не массивом. Проверьте это и убедитесь, что вы передаете метод $ object-> ($ array).
Можешь попробовать:
\Zend\Db\Sql\Predicate\Literal(); //or \Zend\Db\Sql\Literal(); ------------------------------------ $data = array( 'update_time' => new \Zend\Db\Sql\Literal("NOW()"), );
https://framework.zend.com/manual/2.2/en/modules/zend.db.sql.html#literal-literal