如何为所有模型而不是单独实现 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
{
//..
}
基于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
{
//..
}