У меня есть таблица «Роли»:
$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 — не удаляются. Каково решение?
Я рекомендую вам создать ограничение «внешнего ключа» для этого случая (как уже упоминалось). Кроме того, потому что это отношение многих ко многим, вы можете использовать detach()
метод на вашей модели Eloquent (если вы правильно разместили отношения в user
а также role
модели)
$user = App\User::find(1);
// Detach all roles from the user...
$user->roles()->detach();
Вы можете обратиться к документации для больше деталей.
Попробуйте применить $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");
}) ;