如何在 Laravel 中使用 delete on cascade?

How to use delete on cascade in Laravel?

我有一个 'Roles' table:

$table->increments('id');
$table->string('name')->unique();
$table->text('description')->nullable();

和一个'Roles_Users' table:

$table->increments('id');
$table->integer('role_id')->unsigned()->index()->foreign()->references("id")->on("roles")->onDelete("cascade");
$table->integer('user_id')->unsigned()->index()->foreign()->references("id")->on("users")->onDelete("cascade");

当我运行这样一行:

Role::where('name','someString')->delete();

仅删除角色 table 中的相关行,不删除 Roles_Users table 中的相关行。解决方案是什么?

尝试在创建列后应用 $table->index(['role_id', 'user_id']) 和外键。所以你的代码看起来像

Schema::table('role_users', function($table){
    $table->increments('id') ;
    $table->integer('role_id')->unsigned() ;
    $table->integer('user_id')->unsigned()
});
Schema::table('role_users', function($table){
    $table->index(['role_id', 'user_id'])
}) ;
Schema::table('role_users', function($table){
    $table->foreign()->references("id")->on("roles")->onDelete("cascade");
    $table->foreign()->references("id")->on("users")->onDelete("cascade");
}) ;

我建议您为这种情况创建一个 "foreign key" 约束(如其他人所述)。也因为这是一个多对多的关系,你可以在你的 Eloquent 模型上使用 detach() 方法(如果你在你的 userrole 模型中正确地设置了关系)

$user = App\User::find(1);

// Detach all roles from the user...
$user->roles()->detach();

您可以参考 more details 的文档。