2011-05-03 105 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(); 

信息來源:

相關問題