比如说,用户与角色是多对多关系,通过中间表关联,那么,在删除一个角色的时候,对应的中间表数据也需要删除,否则就产生冗余数据了,一般通常是这样写的:

$role->users()->detach();
$role->delete();

写两行代码,先清空与用户的关系,在删除自身。其实我们也可以利用事件这样写:

在 ROLE 模型中这样定义:

protected static function boot()
{
    parent::boot();
        
        static::deleting(function ($model) {
            $model->users()->detach();
        });
}

上述定义了之后,我们只需要:

$role->delete();

在删除之前会触发事件解除与用户的关系。