Невозможно удалить данные в другой таблице, связанной с внешним ключом в Laravel - PullRequest
0 голосов
/ 08 января 2020

У меня есть две таблицы, одна для роли, а другая для ее разрешения. Я хочу удалить разрешение роли при удалении роли. Для этого я связал таблицу ролей с разрешением роли с помощью приведенного ниже кода в миграции, но он не удаляет данные из разрешения роли.

class Role extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
         Schema::create('role', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->foreign('id')->references('role_id')->on('role_permission')->onDelete('cascade');
        });
    }

Разрешение роли:

class CreateRolePermission extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('role_permission', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->integer('role_id');
            $table->integer('module_id');
            $table->integer('permission');
        });
    }

Ответы [ 3 ]

1 голос
/ 08 января 2020

Я думаю, что вы создали внешний ключ в неправильной таблице

, просто удалите

$table->foreign('id')->references('role_id')->on('role_permission')->onDelete('cascade');

из миграции ролей и добавьте

$table->foreign('role_id')->references('id')->on('role')->onDelete('cascade');

в роли role_permission

1 голос
/ 08 января 2020

Вы устанавливаете внешние ограничения в неправильном порядке.

Это должны быть role_permission ссылки на role от id до role_id, например:

// inside CreateRolePermission 
$table->foreign('role_id')
  ->references('id')
  ->on('role')
  ->onDelete('cascade');

Кроме того, удалите foreign в таблице role

0 голосов
/ 09 января 2020

Удалить его из миграции ролей

$ table-> Foreign ('id') -> ссылки ('role_id') -> on ('role_permission') -> onDelete ('cascade');

и добавьте его внутрь в CreateRolePermission следующим образом

класс CreateRolePermission extends Migration {/ ** * Запустите миграцию. * * @return void * / publi c function up () {Schema :: create ('role_permission', function (Blueprint $ table) {$ table-> bigIncrements ('id'); $ table-> integer (' role_id '); $ table-> integer (' module_id '); $ table-> integer ('missions'); $ table-> foreign ('role_id') -> ссылки ('id') -> on ('role ') -> onDelete (' каскад ');}); }

...