2011-05-02 130 views
0

在CakePHP中,如果將createdmodified字段添加到任何數據庫表中,那麼當數據被保存或更新時,它會分別將DATETIME插入到字段中。自動填充數據庫字段(如創建,修改)

我想添加進去。

我在core.php(app/config/core.php)中有一個叫做isCheap()的函數,可以在任何地方調用。該函數返回TRUE或FALSE。

我想擴展MODEL,以便如果任何表有一個is_cheap TINYINT(1)字段,它會自動保存爲isCheap()的值。

我查看了文件cake/libs/model/model.php,並在save()函數中有許多對created,modified,updated的引用。我很確定這是它發揮它的魔力的地方,但是它的功能還有很多,我不知道如何擴展它來添加我的行爲?

回答

3

您不應該修改核心。相反,只需在應用程序中添加一個beforeSave回調到app_model.php即可。所有模型都從這個類繼承而來。

這將是這個樣子:

function beforeSave() { 
    if(isset($this->_schema['is_cheap'])) { 
     // your update here 
    } 
    return true; 
} 
+0

+1這使我對我的答案! – 2011-05-02 18:11:13

0

cdburgess的答案是什麼促使我對我的修補程序。爲了完善,我想在此添加我所做的。

我創建的文件/app/app_model.php以此爲內容:

class AppModel extends Model 
{ 
    function beforeSave() 
    { 
     if(isset($this->_schema['is_cheap'])) { 
      $this->data[$this->alias]['is_cheap'] = isCheap() ? 1 : 0; 
     } 

     return true; 
    } 
} 

我加入了? 1 : 0;監守我不知道,如果真/假將被自動轉換爲整數。

工程很好,謝謝cdburgess。

+0

很高興幫助。我很高興看到它按照您的預期工作。 ;) – 2011-05-02 19:07:06