如何在 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()
方法(如果你在你的 user
和 role
模型中正确地设置了关系)
$user = App\User::find(1);
// Detach all roles from the user...
$user->roles()->detach();
您可以参考 more details 的文档。
我有一个 '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()
方法(如果你在你的 user
和 role
模型中正确地设置了关系)
$user = App\User::find(1);
// Detach all roles from the user...
$user->roles()->detach();
您可以参考 more details 的文档。