我有一个'角色'表:
$table->increments('id');
$table->string('name')->unique();
$table->text('description')->nullable();
和'Roles_Users'表:
$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();
仅删除Roles表中的相关行,而不删除Roles_Users表中的相关行。解决方案是什么?
答案 0 :(得分:2)
我建议你为这种情况创建一个“外键”约束(正如其他人提到的那样)。另外,因为这是多对多关系,您可以在您的Eloquent模型上使用detach()
方法(如果您在user
和role
模型中正确地处理了关系)
$user = App\User::find(1);
// Detach all roles from the user...
$user->roles()->detach();
您可以参考more details的文档。
答案 1 :(得分:0)
尝试在创建列后应用$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");
}) ;