Laravel5 模型的关联删除 (cascading deletes)

开发过程中,用 Laravel 的自带软删除(Soft Deleting)模式,此时如果关联外键删除是不可行的,而且又不想用数据库的事件促发关联表更新的话,可以使用 Laravel 的 Model 的 deleted 事件进行更新。

实现代码: app/Models/User.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
namespace App\Models;

use Illuminate\Notifications\Notifiable;
use App\Models\SoftDeletesEx as SoftDeletes;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable {
use Notifiable;
use SoftDeletes;

public static function boot() {
parent::boot();

static::deleted(function ($user) {
$user->roleusers()->delete();
});
}

public function roleusers() {
return $this->hasMany('App\Models\Roleuser');
}
}

主要代码是这段:

1
2
3
4
5
6
7
public static function boot() {
parent::boot();

static::deleted(function ($user) {
$user->roleusers()->delete();
});
}

参考资料