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

发布于 2024-11-04 14:20:51 字数 442 浏览 0 评论 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() 函数中有许多对创建、修改的引用,已更新。我很确定这就是它发挥魔力的地方,但该函数中有很多内容,我不确定如何扩展它以添加我的行为?

In CakePHP if you add created or modified fields to any DB table, then when data is saved or updated it inserts the DATETIME into the fields respectively.

I want to add to this.

I have a function in core.php (app/config/core.php) called isCheap() and can be called anywhere. This function returns either TRUE or FALSE.

I want to extend MODEL so that if any table has an is_cheap TINYINT(1) field it automatically get saved to the value of isCheap().

I looked at the file cake/libs/model/model.php and in the save() function there are many references to created, modified, updated. I am pretty sure this is where it does its magic but the function has a lot going on in it, and I am not sure how I could extend it to add my behavior?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

琉璃梦幻 2024-11-11 14:20:51

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

它看起来像这样:

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

You shouldn't modify the core. Instead, just add a beforeSave callback to app_model.php in the application. All models inherit from this class.

It would look something like this:

function beforeSave() {
    if(isset($this->_schema['is_cheap'])) {
        // your update here
    }
    return true;
}
剧终人散尽 2024-11-11 14:20:51

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。

cdburgess's answer is what led me to my fix. For completness I want to add here exactly what I did.

I created the file /app/app_model.php with this as the contents:

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

        return true;
    }
}

I added the ? 1 : 0; becuase I am not sure if the TRUE/FALSE will automatically be converted to integers.

Works great, thanks cdburgess.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文