Eloquent:在模型和他的父母上挂钩'保存'事件

时间:2015-04-21 17:13:00

标签: php laravel eloquent

拥有这个父母:

class BaseModel extends Eloquent {
    protected static $rules = [];

    public static function boot() {
        parent::boot();

        static::saving(function($model) {
            return $model->validate(); // <- this executes
        });
    }
}

我怎样才能在儿童模特身上做同样的事情?

class Car extends BaseModel {
    protected static $rules = [];

    public static function boot() {
        parent::boot();

        static::saving(function($model) {
            $model->doStuff(); // <- this doesn't execute
        });
    }
}

如果我删除父项上的saving(),则只会执行子项中的saving()。我需要两个!

1 个答案:

答案 0 :(得分:8)

我找到了解决方案,实际上非常简单。

以下是*ing Eloquent事件的行为,具体取决于返回类型:

  • return nullno return:模型将被保存或下一个saving回调将被执行
  • return true:模型将被保存,但下一个saving回调将执行
  • return false:不会保存模型,也不会执行下一个saving回调

因此,解决这个问题的方法很简单:

class BaseModel extends Eloquent {
    protected static $rules = [];

    public static function boot() {
        parent::boot();

        static::saving(function($model) {
            if(!$model->validate())
                return false; // only return false if validate() fails, otherwise don't return anything
        });
    }
}