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框架版本:7.25.0

提前谢谢。

这个问题已经由@ShakilAhmmed在这里的评论中回答了

我所做的只是转到config文件夹,然后转到database.php,并将mysql数据库引擎从null更改为innoDB即。发件人:

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

收件人:

//...
'engine' => 'InnoDB',
//...

您正在使用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');
});

相关内容

  • 没有找到相关文章

最新更新