8

Is there any way to include MySQL expressions like NOW() in the current build of ZF2 (2.0.0beta4) through Zend\Db and/or TableGateway insert()/update() statements?

Here is a related post on the mailing list, though it hasn't been answered: http://zend-framework-community.634137.n4.nabble.com/Zend-Db-Expr-and-Transactions-in-ZF2-Db-td4472944.html

It appears that ZF1 used something like:

    $data = array( 
        'update_time'   => new \Zend\Db\Expr("NOW()") 
    ); 

And after looking through Zend\Db\Sql\Expression I tried:

    $data = array(
        'update_time' => new \Zend\Db\Sql\Expression("NOW()"),
    );

But get the following error:

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

As recommended here: http://zend-framework-community.634137.n4.nabble.com/ZF2-beta3-Zend-Db-Sql-Insert-new-Expression-now-td4536197.html I'm currently just setting the date with PHP code, but I'd rather use the MySQL server as the single source of truth for date/times.

    $data = array(
        'update_time' => date('Y-m-d H:i:s'),
    );

Thanks, I appreciate any input!

4 Answers 4

11

Zend_Db_Sql_Expression works for me now.

$data = array(
    'update_time' => new \Zend\Db\Sql\Expression("NOW()"),
);
Sign up to request clarification or add additional context in comments.

1 Comment

Would you mind adding a little more info around this answer? Thank you
2

I am not sure if they fixed this in the latest updates, but it was a know bug and even if they said it was fixed, for me it still didn't work after the fix.

2 Comments

Thanks for the response and link, I'll update to the latest source and see if it persists.
zend framework 2.0 beta 6 and still no solution to this problem!?!?!
0

It works for me too. Maybe, your problem was like mine. The string error conversion was because the parameter that I passed to method was elements of array and not the array. Check this and have sure that you are passing $object->method($array).

Comments

0

You can try:

\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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.