Laravel 中利用『模型事件』来实现删除数据时的连带删除
删除一条数据库记录的时候希望能自动删除这条记录关联的其它数据,如删除用户后连带删除其创建的文章和图片。
1、可以用Eloquent的deleting事件来实现:
class WheelActivity extends Model
{
public function awards() {
return $this->hasMany('App\Model\WheelAward', 'wheel_activity_id', 'id');
}
protected static function boot()
{
parent::boot();
static::deleting(function($wheelactivity){
$wheelactivity->awards()->delete();
});
}
**注:** 在控制器中删除时必须使用first()查询,否则无效。
example:WheelActivity::where('id', $id)->first()->delete();
}
2、在控制其中直接删除
$user = User::find($id);
$user->photos()->delete(); // 删除关联表的数据
$user->delete(); // 删除主表数据
3、在AppServiceProvider 监听模型事件(不建议)
public function boot()
{
WheelActivity::deleting(function($wheelactivity){
$wheelactivity->awards()->delete();
});
}
4、使用事物(自己脑补吧,这里不做具体说明)。
本作品采用《CC 协议》,转载必须注明作者和本文链接
如果
WheelActivity::where('id', $id)->first()
返回空报错的,需要先判断WheelActivity::where('id', $id)->first()->delete();