8

有没有办法通过 Zend\Db 和/或 TableGateway insert()/update() 语句在 ZF2 (2.0.0beta4) 的当前构建中包含 MySQL 表达式,如 NOW()?

这是邮件列表上的相关帖子,尽管尚未得到答复: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

4 回答 4

11

Zend_Db_Sql_Expression 现在对我有用。

$data = array(
    'update_time' => new \Zend\Db\Sql\Expression("NOW()"),
);
于 2013-05-07T02:58:24.540 回答
2

我不确定他们是否在最新的更新中修复了这个问题,但这是一个已知的错误,即使他们说它已修复,对我来说,修复后它仍然无法正常工作。

于 2012-06-27T20:27:59.750 回答
0

它也适用于我。也许,你的问题和我的一样。字符串错误转换是因为我传递给方法的参数是数组元素而不是数组。检查此项并确保您正在传递 $object->method($array)。

于 2013-12-02T13:16:18.573 回答
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

于 2017-11-20T11:48:06.813 回答