2011-05-03 104 views
3

我有这样的代码在我的CakePHP项目:如何在cakephp中为date字段使用mysql now()函数?

$this->data['MyObject']['expire_date'] = 'NOW()'; 

和...

$this->MyObject->save($this->data); 

但这不会在数据库中保存的数据。谷歌搜索后,我发现我可以使用now()像这样。但它似乎是错误的,使用它的正确方法是什么?

PS:我的MySQL字段的类型是'DATE'。它的工作原理,如果我用这样的:

$this->data['MyObject']['expire_date'] = date('Y-m-d', mktime(0, 0, 0, date("m"), date("d")+30, date("Y"))); 
+0

你有没有考虑设置一个[DEFAULT约束(http://dev.mysql.com/doc/refman/5.0/en/timestamp.html),以将值设置为NOW()? – 2011-05-03 04:07:24

+0

我更新了问题。我的要求是“DATE(NOW()+ INTERVAL 30 DAY)”。但即使“NOW()”也不起作用! – pMan 2011-05-03 04:38:42

+0

这是一种PostgreSQL语法 - 查看[DATE_ADD](http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-add) – 2011-05-03 04:40:12

回答

6

可以缩短,要

$this->data['MyObject']['expire_date'] = date('Y-m-d H:i:s'); 

默认情况下,日期()将采取目前的时间,如果你不通过它第二次“时间戳”论据。

此方法优于调用DboSource::expression(),尤其是当您想在控制器中出于各种原因而不是在模型中将其设置时。

+0

这很好(我有格式化日期格式),但如何使用MySQL函数呢? – pMan 2011-05-03 04:22:18

+1

这样做不建议,因为您的代码将依赖于数据库。如果这不是问题,你可以尝试这里描述的方法:http://cakephp.1045679.n5.nabble.com/REgarding-using-Mysql-functions-like-NOW-CURDATE-etc-tp1309285p1309290.html这使用数据源直接,但*被警告,这不会自动转义,所以你必须照顾那*。最好使用'date()':) – JohnP 2011-05-03 04:27:56

+1

一般来说,如果你想让SQL执行得很好 - 你*有*可以使用本机功能。而且这个要求很简单,足以被大多数数据库支持... – 2011-05-03 04:33:45

-3
$this->data['MyObject']['expire_date'] = strtotime('now'); 
+0

1)CakePHP的不期望的Unix时间戳2)传递'now'到'的strtotime()'是多余 – 2017-04-18 10:51:38

17
$this->data['MyObject']['expire_date'] = DboSource::expression('NOW()'); 
+4

应当称为这样的: '$分贝= $这个 - > MyObject->了getDataSource();' ()());' – 2015-03-30 06:35:18

+1

'这个会让你**非静态方法DboSource :: expression()不应该被静态调用,在** Strict Mode **中假设$来自不兼容的上下文**。无论谁发现这一点,请使用'$ db->表达式('NOW()')'在其他答案中建议。 – 2016-05-18 21:20:18

9

对于CakePHP的2.x的用户:

​​
0

对于CakePHP的3(万一有人的搜索),你需要使用SQL函数:

$query = $this->Example->query(); 
$query 
    ->insert(['created','id']) 
    ->values(array(
     'created' => $query->func()->now(), 
     'id' => $id, 
    )); 
$result = $query->execute(); 

信息来源:

相关问题