Миграции Laravel успешно переносятся, но они не создают отношения внешнего ключа в таблицах

Мое приложение Laravel успешно создает все таблицы в миграции, но ему не удается создать отношения внешних ключей в таблице или даже применить каскад, когда я удаляю основную запись. Вот миграция.

    Schema::create('articles', function (Blueprint $table) {
        $table->id('id');
        $table->unsignedBigInteger('user_id');
        $table->string('title');
        $table->text('excerpt');
        $table->text('body');
        $table->timestamps();

        $table->foreign('user_id')
            ->references('id')
            ->on('users')
            ->onDelete('cascade');

    });

Когда я запускаю php artisan migrate, он успешно мигрирует.

λ php artisan migrate

Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (0.11 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (0.1 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (0.07 seconds)
Migrating: 2020_08_26_122846_create_articles_table
Migrated:  2020_08_26_122846_create_articles_table (0.14 seconds)

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

Проверьте изображение таблицы пользователей здесь. Я выделил первичный ключ.

Я добавил некоторые заводские данные, касающиеся пользователя и статьи, и когда я удаляю пользователя, статьи остаются сиротами.

Что может быть не так?

  • Версия PHP: 7.3.21
  • Версия MySql: 5.7.31
  • Версия MariaDB: 10.4.13
  • Версия Laravel Framework: 7.25.0

Заранее спасибо.


person AlienSoft Technologies    schedule 27.08.2020    source источник
comment
Используют ли ваши таблицы движок InnoDB?   -  person Shakil Ahmmed    schedule 27.08.2020
comment
Ух ты! Нет, эта функция была нулевой, и мы добавили ее, после чего она работала как по волшебству. Благодарю вас!   -  person AlienSoft Technologies    schedule 27.08.2020
comment
@ShakilAhmmed, не могли бы вы добавить это как ответ, чтобы я мог его отметить? Так что это может помочь другим в будущем?   -  person AlienSoft Technologies    schedule 27.08.2020
comment
Конечно, я уже добавил это как ответ.   -  person Shakil Ahmmed    schedule 27.08.2020
comment
@ShakilAhmmed нет, я все равно добавлю это ..   -  person AlienSoft Technologies    schedule 28.08.2020


Ответы (2)


Вы используете Schema::create для создания таблиц.

В документах Laravel я вижу Schema::table при работе с внешними ключами. Возможно, вам стоит попробовать разделить код:

Schema::create('articles', function (Blueprint $table) {
    $table->id('id');
    $table->unsignedBigInteger('user_id');
    $table->string('title');
    $table->text('excerpt');
    $table->text('body');
    $table->timestamps();
});

Schema::table('articles', function (Blueprint $table) {
    $table->foreign('user_id')
        ->references('id')
        ->on('users')
        ->onDelete('cascade');

});
person GlennM    schedule 27.08.2020

На вопрос ответил @ShakilAhmmed в комментарии здесь

Все, что я сделал, это зашел в папку config, затем database.php и изменил механизм базы данных mysql с null на innoDB, т.е. From:

//...
'engine' => null,
//...

To:

//...
'engine' => 'InnoDB',
//...
person AlienSoft Technologies    schedule 28.08.2020