Как использовать delete на каскаде в Laravel?

У меня есть таблица «Роли»:

$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

Решение

Я рекомендую вам создать ограничение «внешнего ключа» для этого случая (как уже упоминалось). Кроме того, потому что это отношение многих ко многим, вы можете использовать detach() метод на вашей модели Eloquent (если вы правильно разместили отношения в user а также role модели)

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

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

Вы можете обратиться к документации для больше деталей.

2

Другие решения

Попробуйте применить $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");
}) ;
0