基于documentation of laravel eloquent event,所有雄辩事件都是根据每个模型单独触发的,有没有办法使用'创建'事件或任何其他雄辩事件由所有模型触发
例如,如果创建了任何模型,则触发事件A
答案 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
{
//..
}