SQLSTATE [HY000]:一般错误:1005无法创建表`Projectname`.`users`(errno:150“外键约束格式不正确”)[重复]
Posted
技术标签:
【中文标题】SQLSTATE [HY000]:一般错误:1005无法创建表`Projectname`.`users`(errno:150“外键约束格式不正确”)[重复]【英文标题】:SQLSTATE[HY000]: General error: 1005 Can't create table `Projectname`.`users` (errno: 150 "Foreign key constraint is incorrectly formed") [duplicate] 【发布时间】:2020-11-27 03:51:34 【问题描述】:Schema::create('projects', function (Blueprint $table)
$table->id();
$table->string('name');
$table->timestamps();
);
Schema::create('users', function (Blueprint $table)
$table->id();
$table->foreignId('project_id')->constrained();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
);
Schema::create('tasks', function (Blueprint $table)
$table->id();
$table->foreignId('user_id')->constrained();
$table->string('name');
$table->timestamps();
);
当我运行 php artisan migrate
时,仅创建 users 表,然后迁移过程停止...
SQLSTATE[HY000]:一般错误:1005 无法创建表
Projectname
.users
(errno: 150 "外键约束为 格式不正确”)(SQL:alter tableusers
添加约束users_project_id_foreign
外键 (project_id
) 引用projects
(id
))
【问题讨论】:
将帮助我查看实际的 SQL。否则取决于 laravel 的人。 我给了你一个带有描述的答案,如果有帮助,那么将该答案标记为已接受 【参考方案1】:您使用了constrained()
,它倾向于查找表project
或user
而不是projects
或users
。在这种情况下,您需要在constrained()
中指定表名。
Schema::create('projects', function (Blueprint $table)
$table->id();
$table->string('name');
$table->timestamps();
);
Schema::create('users', function (Blueprint $table)
$table->id();
$table->foreignId('project_id')->constrained('projects');
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
);
Schema::create('tasks', function (Blueprint $table)
$table->id();
$table->foreignId('user_id')->constrained('users');
$table->string('name');
$table->timestamps();
);
您可以通过here了解更多
【讨论】:
【参考方案2】:查看您的 migration 目录,您将看到所有迁移文件,例如 2014_10_12_000000_create_users_table
您收到此错误是因为您的 projects_create_table 应该在 create_users_table 文件之前迁移。
默认情况下,laravel 将每个迁移文件名以date_time
格式命名,例如2014_10_12_000000_table_names.php
,这样所有文件都可以串行迁移。
因此,将您的 create_users_table 文件名更改为 date_time
,以便在 projects_create_table 之后进行迁移,例如:
2020_01_01_000000_create_projects_table.php
2020_01_01_000001_create_users_table.php
现在,如果你运行php artisan migrate
,首先会创建projects
表,然后是users
表。
【讨论】:
以上是关于SQLSTATE [HY000]:一般错误:1005无法创建表`Projectname`.`users`(errno:150“外键约束格式不正确”)[重复]的主要内容,如果未能解决你的问题,请参考以下文章
SQLSTATE [HY000]:一般错误:1364 字段“标题”没有默认值
PDO 错误:SQLSTATE [HY000]:一般错误:2031
SQLSTATE[HY000]:一般错误:在 Laravel 中迁移期间出现 1005