使用CDbMigration将当前时间插入MySQL表

时间:2014-12-10 14:46:15

标签: php mysql datetime yii timestamp

如何在Yii 1.x的CDbMigration中正确使用MySQL的FROM UNIXTIME

我已经借用了解决方案,将当前时间作为时间戳转换为MySQL的DateTime字段this answer并且只打印它时:

echo 'FROM_UNIXTIME('.$base.')'."\n";
echo 'FROM_UNIXTIME('.$sixDaysLater.')'."\n";
一切似乎都很好:

FROM_UNIXTIME(1418223600)
FROM_UNIXTIME(1418742000)

但是,当我尝试使用相同的技术作为迁移的一部分时:

$this->insert('contents', array
(
    'author_id'=>1,
    'type'=>5,
    'status'=>1,
    'category'=>1,
    'title'=>'title',
    'body'=>'body',
    'creation_date'=>'FROM_UNIXTIME('.$base.')',
    'modification_date'=>'FROM_UNIXTIME('.$base.')',
    'availability_date'=>'FROM_UNIXTIME('.$sixDaysLater.')',
    'short'=>'short'
));

这失败了 - 也就是说,迁移很顺利,但我可以在phpMyAdmin中看到,此记录的相关字段已填充零(0000-00-00 00:00:00),而不是预期值。

我错过了什么?是吗,因为insert中的值正在编码/转义?

1 个答案:

答案 0 :(得分:2)

您可以改为使用CDBExpression

new CDbExpression("NOW()");

我的意思是:

'creation_date'=>new CDbExpression("NOW()")

或者,如果您想使用FROM UNIXTIME,您也可以这样做。

  

CDbExpression 表示不需要转义的DB表达式。