有没有办法通过Zend \ Db和/或TableGateway insert()/ update()语句在ZF2(2.0.0beta4)的当前版本中包含NOW()等MySQL表达式?
以下是邮件列表中的相关帖子,但尚未得到答复: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('Y-m-d H:i:s'),
);
谢谢,我感谢任何意见!
答案 0 :(得分:11)
Zend_Db_Sql_Expression现在适用于我。
$data = array(
'update_time' => new \Zend\Db\Sql\Expression("NOW()"),
);
答案 1 :(得分:2)
我不确定他们是否在最新的更新中解决了这个问题,但这是一个知道bug,即使他们说它已修复,但对我来说,修复后仍无效。
答案 2 :(得分:0)
它也适合我。也许,你的问题就像我的一样。字符串错误转换是因为我传递给方法的参数是数组的元素而不是数组。检查一下,确保你传递了$ object->方法($ array)。
答案 3 :(得分:0)
您可以尝试:
\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