如何为所有模型实施雄辩的“保存”事件,而不是单独实施

时间:2017-12-06 09:25:25

标签: laravel laravel-5 eloquent laravel-events

基于documentation of laravel eloquent event,所有雄辩事件都是根据每个模型单独触发的,有没有办法使用'创建'事件或任何其他雄辩事件由所有模型触发

例如,如果创建了任何模型,则触发事件A

2 个答案:

答案 0 :(得分:2)

收听被解雇的Eloquent creating事件。这是一个'字符串'事件仍然不是一个对象所以你可以在这里做一些...通配符匹配。

这是从Eloquent发出的事件的字符串:

"eloquent.{$event}: ".static::class

所以你可以倾听" eloquent.creating:*"捕获所有这些字符串事件,以便为任何模型创建Eloquent。

Event::listen('eloquent.creating: *', function ($event, $model) {
    ....
});

显然,如果您已将模型定义为使用自定义事件对象,则无法捕获这些对象。

您也可以创建一个模型观察者,但是您必须将它注册到您希望捕获事件的应用程序中的每个模型。

答案 1 :(得分:2)

扩展模型类:

use Auth;
use Illuminate\Database\Eloquent\Model;

class GeneralModel extends Model
{
  public static function boot()
  {
    parent::boot();

    static::creating(function ($model) {
        if (Auth::user()) {
            $model->created_by = Auth::user()->id;
            $model->updated_by = Auth::user()->id;
        }
    });
  }
}

当您说创建一个说property个对象时,它将被触发。将它用于您需要的所有模型。

class Property extends GeneralModel
{
  //..
}