【发布时间】:2014-09-15 11:22:22
【问题描述】:
在我的一个模型中,我有一个名为“slug”的属性。当 slug 改变时,我需要在更新到新的之前记录原始 slug,所以我的模型有一个受保护的属性“originalSlug”。在保存模型之前,我在我的模型中做了这样的事情:
protected $originalSlug;
public function customSave($newSlug){
$this->originalSlug = $this->slug;
$this->slug = $newSlug;
return $this->save();
}
然后我有一个事件,在成功保存后使用该 originalSlug 执行其他任务。 问题是 Laravel 试图将 originalSlug 保存到数据库中,尽管它实际上不是属性并且没有数据库列。所以它失败并出现“找不到列”错误。
我该怎么做才能让 Laravel 忽略 originalSlug 属性,或者我应该有更好的方法吗?
【问题讨论】:
-
为什么不在调用 save 之前引发事件?
-
我只希望在模型成功保存后触发事件。
-
是的,您可以引发事件,将旧数据作为 DTO 传递。然后仅在模型成功保存后触发它。这个系列可能会有所帮助:laracasts.com/series/commands-and-domain-events
-
感谢您的信息。我会研究那个系列的。目前我有点想不通,但这很可能是最好的方法。
标签: laravel properties model attributes eloquent