gpt4 book ai didi

mysql - Laravel 迁移 "Cannot add foreign key constraint"错误与 MySQL 数据库

转载 作者:行者123 更新时间:2023-12-01 00:03:24 25 4
gpt4 key购买 nike

我正在开发 Laravel 应用程序。我正在使用 MySQL 作为数据库。我创建了一个模型类并试图在其上运行迁移。但是,当我运行迁移时,我在添加外键约束时遇到错误。这是我到目前为止所做的。

首先,我迁移了运行此命令的内置 Laravel 用户模型。

php artisan migrate

用户表已在数据库中创建。

然后我创建了另一个运行此命令的模型。

php artisan make:model TodoItem -m

然后我在迁移文件中添加了以下代码。

class CreateTodoItemsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('todo_items', function (Blueprint $table) {
$table->text('about');
$table->integer('user_id');
$table->increments('id');
$table->timestamps();

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

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('todo_items');
}
}

正如您在上面看到的,我通过向 todo_items 表添加一个外键来建立 users 表和 todo_items 表之间的关系。然后,我尝试通过运行此命令来迁移 TodoItem 模型。

php artisan migrate

当我运行命令时,出现此错误。

  Illuminate\Database\QueryException  : SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `todo_items` add constraint `todo_items_user_id_foreign` foreign key (`user_id`) references `users` (`id`) on delete cascade)

at /var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664
660| // If an exception occurs when attempting to run a query, we'll format the error
661| // message to include the bindings with SQL, which will make this exception a
662| // lot more helpful to the developer instead of just the database's errors.
663| catch (Exception $e) {
> 664| throw new QueryException(
665| $query, $this->prepareBindings($bindings), $e
666| );
667| }
668|

Exception trace:

1 PDOException::("SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint")
/var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php:458

2 PDOStatement::execute()
/var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php:458

Please use the argument -v to see more details.

我在之前使用 Postgresql 的项目中做了同样的事情。我工作得很好。对于这个项目,我使用的是 MySQL 数据库,现在它给了我上述错误。

最佳答案

这是因为您添加了 $table->integer('user_id'); 到您的迁移文件。您必须添加 unsignedInteger 而不是 integer,因为 users 表的原始 id 列是 unsigned(并且两列必须完全相同)。

[编辑]

从 Laravel 5.8 开始,默认的 users 表的 id 列类型不再是 integer。它现在是一个 bigInteger

关于mysql - Laravel 迁移 "Cannot add foreign key constraint"错误与 MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51741618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com