我正在尝试使用laravel为项目创建登录/注册系统,因为这是我的第一次,我遇到了很多麻烦,所以我&#39我请你原谅我所犯的任何非常愚蠢的错误。
我已经成功将新的自定义字段添加到默认注册屏幕,但在我的修改后的用户表中,我还有两个引用其他表的外键(' gameInfo_id'指的是& #39; gameInfo'表格和' role_id'指的是'角色'表格)
这是否意味着我必须找到一种方法来自动填写外键?如果是这样,我该怎么做呢? 我做了一些谷歌搜索,发现这通常似乎是问题,但我从来没有找到明确的解决方案。
谢谢!
这是我在users表中的迁移:
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('firstName');
$table->string('lastName');
$table->string('email')->unique;
$table->string('password');
$table->integer('gameInfo_id')->unsigned();
$table->integer('role_id')->unsigned();
$table->timestamps();
});
Schema::table('users', function($table) {
$table->foreign('gameInfo_id')->references('id')->on('gameInfo');
$table->foreign('role_id')->references('id')->on('roles');
});
游戏信息是用户在我们正在制作的游戏中将获得的分数表。我尝试制作的是,当新用户注册帐户时,它会在gameInfo中创建一个新行,gameInfo_id外键将引用该行。如果有帮助,则默认情况下,此新创建的行的列可以设置为0
答案 0 :(得分:1)
我会反过来做。 我将使用user_id列在gameInfo表中引用用户。 这样,用户拥有许多gameInfo,而gameInfo属于用户。由于在创建用户之前没有创建游戏信息,并且已经玩过游戏。
这有意义吗?
答案 1 :(得分:0)
如果users表已包含数据集,其中有些数据集不存在gameInfo_id
或role_id
,则无法向表中添加外键约束。
在添加外键约束之前,表必须处于有效状态。
这意味着:向现有字段添加新的外键约束并不是最好的主意。无论如何,你必须先修复完整性。
如果您仍处于开发环境中,解决此问题的最佳方法是使用migrate:refresh
重新开始。
如果系统与用户一起投放生产,则必须修复所有无效或未设置gameInfo_id
和role_id
的用户。如果你只有几个用户,你可以手动完成。如果你有很多用户,你可以在迁移脚本中做一些魔术(在添加fk约束之前迭代所有用户并添加缺少的引用)。
答案 2 :(得分:0)
由于 - > nullable()似乎没有被laravel识别,我改为决定给gameInfo中的每一列默认值为0,这对我来说也很合适。
另一方面,扭转用户和gameInfo之间的FK关系也有效,所以我的问题已经解决了!
非常感谢你们的回答,我们非常感谢所有的贡献!