Laravel 迁移正在成功迁移,但未在表中创建外键关系
Laravel Migrations are migrating successfully but they are not creating foreign key relationship in tables
我的 Laravel 应用程序成功创建了迁移中的所有 table,但它无法在 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();
$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)
但是,当我检查数据库时,没有创建关系,只是为外键创建了索引。
Check the Articles Table image in this link. I have marked the necessary parts
Check the Users Table image here. I have highlighted the primary key.
我添加了一些与用户和文章相关的工厂数据,当我删除用户时,文章将作为孤儿留下。
有什么问题吗?
- PHP版本:7.3.21
- MySql版本:5.7.31
- MariaDB 版本:10.4.13
- Laravel框架版本:7.25.0
提前致谢。
您正在使用 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');
});
@ShakilAhmmed 在评论中回答了这个问题
我所做的只是转到 config
文件夹,然后 database.php
并将 mysql 数据库引擎从 null 更改为 innoDB
IE。
来自:
//...
'engine' => null,
//...
收件人:
//...
'engine' => 'InnoDB',
//...
我的 Laravel 应用程序成功创建了迁移中的所有 table,但它无法在 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();
$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)
但是,当我检查数据库时,没有创建关系,只是为外键创建了索引。 Check the Articles Table image in this link. I have marked the necessary parts
Check the Users Table image here. I have highlighted the primary key.
我添加了一些与用户和文章相关的工厂数据,当我删除用户时,文章将作为孤儿留下。
有什么问题吗?
- PHP版本:7.3.21
- MySql版本:5.7.31
- MariaDB 版本:10.4.13
- Laravel框架版本:7.25.0
提前致谢。
您正在使用 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');
});
@ShakilAhmmed 在评论中回答了这个问题
我所做的只是转到 config
文件夹,然后 database.php
并将 mysql 数据库引擎从 null 更改为 innoDB
IE。
来自:
//...
'engine' => null,
//...
收件人:
//...
'engine' => 'InnoDB',
//...