ZF2 Zend \ Db使用Mysql表达式插入/更新(Zend \ Db \ Sql \ Expression?)

时间:2012-06-25 03:11:15

标签: php zend-framework2 zend-db

有没有办法通过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'),
    );

谢谢,我感谢任何意见!

4 个答案:

答案 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