如何为所有模型而不是单独实现 eloquent 'saving' 事件

How to implement eloquent 'saving' event for all models , not individually

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

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

监听触发的 Eloquent creating 事件。这是一个 'string' 事件仍然不是一个对象,所以你可以在这里做一些...通配符匹配。

这是从 Eloquent:

触发的事件的字符串
"eloquent.{$event}: ".static::class

因此您可以侦听 "eloquent.creating: *" 以捕获为 Eloquent 创建任何模型的所有这些字符串事件。

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

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

您也可以制作一个模型观察器,但您必须将它注册到应用程序中您想要为其捕获事件的每个模型。

扩展模型class:

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
{
  //..
}