自动填充数据库字段(如创建,修改过)

时间:2011-05-02 17:23:52

标签: cakephp cakephp-1.3

在CakePHP中,如果将createdmodified字段添加到任何数据库表,则在保存或更新数据时,它会将DATETIME分别插入到字段中。

我想补充一点。

我在core.php(app / config / core.php)中有一个名为isCheap()的函数,可以在任何地方调用。此函数返回TRUE或FALSE。

我想扩展MODEL,以便如果任何表格有is_cheap TINYINT(1)字段,它会自动保存为isCheap()的值。

我查看了文件cake/libs/model/model.php,在save()函数中有许多对createdmodifiedupdated的引用。我很确定这是它的神奇之处,但是它的功能有很多,我不知道如何扩展它来添加我的行为?

2 个答案:

答案 0 :(得分:3)

您不应该修改核心。相反,只需在应用程序中向app_model.php添加beforeSave回调。所有模型都继承自此类。

它看起来像这样:

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

答案 1 :(得分: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;因为我不确定TRUE / FALSE是否会自动转换为整数。

效果很好,谢谢cdburgess。