【问题标题】:Automagically populate DB fields (like created, modified do)自动填充数据库字段(如创建、修改)
【发布时间】:2011-05-02 17:23:52
【问题描述】:

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

我想补充一下。

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

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

我查看了文件cake/libs/model/model.php,在save() 函数中有很多对createdmodifiedupdated 的引用。我很确定这就是它发挥魔力的地方,但该功能有很多事情要做,我不确定如何扩展它以添加我的行为?

【问题讨论】:

    标签: cakephp cakephp-1.3


    【解决方案1】:

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

    看起来像这样:

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

    【讨论】:

      【解决方案2】:

      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。

      【讨论】:

      • 很高兴为您提供帮助。我很高兴看到它也按您的预期工作。 ;)
      猜你喜欢
      • 1970-01-01
      • 2011-10-24
      • 1970-01-01
      • 2012-08-22
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多