我正在尝试删除用户,并使用“级联”自动删除其所有关系。不知道该怎么做。我正在使用mysql。 到目前为止,我已经做到了:
用户模型
class User extends Authenticatable
{
use Notifiable;
//...
public function profile()
{
return $this->hasOne('App\Profile');
}
}
个人资料模型
class Profile extends Model
{
public function user()
{
return $this->belongsTo('App\User');
}
}
个人资料迁移
public function up()
{
Schema::create('profiles', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('user_id');
$table->integer('phone');
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
}
我想尝试修补:
$user = App\User::firsts();
$user->delete(); // it deletes only the user
$user->profile->delete(); // it deletes only the profile
答案 0 :(得分:1)
除了通过数据库级联,您还可以通过使用delete事件删除相关模型来删除用户时删除相关模型。
将其包括在用户模型的启动功能中:
public static function boot ()
{
parent::boot();
self::deleting(function (User $user) {
$user->profile->delete();
});
}
答案 1 :(得分:1)
您可以使用模型事件:
class User extends Eloquent
{
public static function boot ()
{
parent::boot();
self::deleting(function ($user) {
// This will be executed right before the user is deleted
$user->profile->delete();
});
}
}
通过这种方式,每当您在delete()
对象上调用User
方法时,Laravel都会立即触发$user->profile->delete();
。
答案 2 :(得分:1)
不需要级联人员来进行级联工作。这段代码对我来说很好-
迁移:
Schema::create('profiles', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('user_id');
$table->integer('phone');
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
控制器:
->delete()
在这里可以删除用户和个人资料行
public function deleteUser(){
Auth::user()->delete();
return redirect()->back();
}
查看删除链接
<a href="{{ route('deleteUser') }}">Delete</a>
路线
Route::get('/delete', 'HomeController@deleteUser')->name('deleteUser');