我有一个Laravel应用程序设置,我正在使用Sentry 2进行用户身份验证。我有一个名为Post
的模型以及默认的哨兵User
表。我想让一个用户有很多帖子,一个帖子属于一个用户。为了在我的数据库模式中反映这一点,我需要在posts
和users
之间创建一个外键约束。
我写的迁移如下:
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错误:
[照亮\数据库\ QueryException] SQLSTATE [HY000]:常规错误:1005无法创建表'blog.dev。#sql-3bb_2d'(错误号:150)(SQL:alter table
posts
添加约束posts_user_id_foreign外键(user_id
)引用users
(id
))
起初我认为发生这个错误是因为users
中的主键列的定义与我的外键列user_id
不同,但是它们都被定义为int(10)
。
从Google我了解到这个错误可能是由于两个列定义不同造成的,但是这里似乎并不是这样。
外键应该已经在数据库中,因此我建议采取两个步骤。另外我建议将列user_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');
});
}