【问题标题】:Cakephp: afterSave() on insert only?Cakephp:仅插入后的afterSave()?
【发布时间】:2012-09-06 19:25:37
【问题描述】:

我想在 afterSave() 中检测是否插入了新记录或更新了旧记录,但我不知道如何。

我曾考虑在 beforeSave() 中编写一个配置变量(如果未设置 id,我可以在其中检测插入)但也许这不是一种安全的方法。

有什么想法吗?

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    您可以使用 afterSave( $model, $created ) 函数来实现。

    因为,afterSave() 函数的 第二个参数Boolean,如果 创建了新行,则为 true 否则它会给你false

    【讨论】:

    • 你是对的。不过,从技术上讲,他正在使用 afterSave($model, $created),如果将参数留在他的模型中,则无法正确实现它。如果 PHP 5.4 被实现为 afterSave() 会抛出一个警告。
    • 链接已失效,afterSave API 也不同:afterSave(boolean $created, array $options = array()); more info
    【解决方案2】:

    您可以通过在此处编写以下代码行来检查这一点:

    public function afterSave(Event $event, Entity $entity, array $options) {
        if ($entity->isNew()) {
            // do whatever you need to do here.
        }
    }
    

    【讨论】:

    • 重要的是要了解此答案适用于 CakePHP 3+,但最初的问题是根据提出的日期参考版本 1.X 或 2.X。
    【解决方案3】:

    传递 id(当记录更新时)并在 saveall 或 save 后立即保存 也可以提供帮助。 例如; $this->set('id', $this->MyModule->id);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多