我已经设置了 Laravel 应用程序并且正在使用Sentry 2 https://cartalyst.com/manual/sentry用于用户身份验证。我有一个模型叫Post
与默认哨兵一起User
桌子。我想让一个用户拥有很多帖子,并且一个帖子属于一个用户。为了在我的数据库模式中反映这一点,我需要在之间创建外键约束posts
and 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' (errno: 150) (SQL:
改变表posts
添加约束 posts_user_id_foreign
外键(user_id
) 参考users
(id
))
起初我以为发生这个错误是因为主键列users
与我的外键列的定义不同user_id
,但是它们都被定义为int(10)
.
从谷歌我了解到这个错误可能是由于两个列定义不同引起的,但是这里的情况似乎并非如此。
外键应该已经在数据库中,因此我建议采取两个步骤。我还建议制作专栏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');
});
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)