Php 使用Laravel迁移创建外键时出现MySQL错误
我已经安装了一个Laravel应用程序,我正在使用它进行用户身份验证。我有一个名为Php 使用Laravel迁移创建外键时出现MySQL错误,php,mysql,laravel,foreign-keys,laravel-eloquent,Php,Mysql,Laravel,Foreign Keys,Laravel Eloquent,我已经安装了一个Laravel应用程序,我正在使用它进行用户身份验证。我有一个名为Post的模型以及默认的sentryUser表。我想有一个用户有许多职位,一个职位属于一个用户。为了在我的数据库模式中反映这一点,我需要在帖子和用户之间创建外键约束 我编写的迁移如下所示: public function up() { Schema::table('posts', function(Blueprint $table) { $table->integer('use
Post
的模型以及默认的sentryUser
表。我想有一个用户有许多职位,一个职位属于一个用户。为了在我的数据库模式中反映这一点,我需要在帖子
和用户
之间创建外键约束
我编写的迁移如下所示:
public function up()
{
Schema::table('posts', function(Blueprint $table)
{
$table->integer('user_id')->after('id')->nullable();
$table->foreign('user_id')->references('id')->on('users');
});
}
在使用php artisan migrate
运行它之后,我在命令提示符中得到一个MySQL错误:
[照亮\数据库\查询异常]SQLSTATE[HY000]:一般错误: 1005无法创建表“blog.dev.#sql-3bb_2d”(错误号:150)(sql: 更改表格
posts
addconstraintposts\u user\u id\u foreign
外键(user\u id
)引用users
(id
)
起初我认为发生此错误是因为users
中的主键列的定义不同于我的外键列user\u id
,但是它们都被定义为int(10)
从Google我了解到,这个错误可能是由于两个列的定义不同造成的,但是这里的情况似乎不是这样。外键应该已经在数据库中了,因此我建议采取两个步骤。我还建议将列
user\u id
设为未签名:
public function up()
{
Schema::table('posts', function(Blueprint $table)
{
$table->integer('user_id')->after('id')->nullable()->unsigned();
});
Schema::table('posts', function(Blueprint $table)
{
$table->foreign('user_id')->references('id')->on('users');
});
}
我解决了这个问题
Schema::disableForeignKeyConstraints();
在第一次迁移和
Schema::enableForeignKeyConstraints();
在上次迁移中
Schema::enableForeignKeyConstraints();