Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 自动填充外键行_Php_Mysql_Laravel 5 - Fatal编程技术网

Php 自动填充外键行

Php 自动填充外键行,php,mysql,laravel-5,Php,Mysql,Laravel 5,我正在尝试使用laravel为一个项目创建一个登录/注册系统,由于这是我第一次,我遇到了很多麻烦,所以我请求原谅我犯的任何极其愚蠢的错误 我已经成功地向默认注册屏幕添加了一个新的自定义字段,但在我修改的用户表中,我还有两个外键引用其他表(“gameInfo\u id”指“gameInfo”表,“role\u id”指“roles”表) 这就是我得到的错误: 这是否意味着我必须找到一种自动填写外键的方法?如果是的话,我将如何着手做这件事? 我在谷歌上搜索了一下,发现这似乎是个问题,但我从未找到明

我正在尝试使用laravel为一个项目创建一个登录/注册系统,由于这是我第一次,我遇到了很多麻烦,所以我请求原谅我犯的任何极其愚蠢的错误

我已经成功地向默认注册屏幕添加了一个新的自定义字段,但在我修改的用户表中,我还有两个外键引用其他表(“gameInfo\u id”指“gameInfo”表,“role\u id”指“roles”表)

这就是我得到的错误:

这是否意味着我必须找到一种自动填写外键的方法?如果是的话,我将如何着手做这件事? 我在谷歌上搜索了一下,发现这似乎是个问题,但我从未找到明确的解决方案

谢谢大家!

以下是我在用户表中的迁移:

      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中创建一个新行,gameInfo\u id外键将引用该行。如果用户表已经包含数据集,其中一些数据集没有现有的
gameInfo\u id
role\u id
,则默认情况下,此新创建行的列可以设置为0。如果用户表已经包含数据集,则不能向表中添加外键约束。 在添加外键约束之前,表必须处于有效状态

这意味着:向现有字段添加新的外键约束不是最好的主意。无论如何,你必须先修复完整性

如果您仍在开发环境中,解决此问题的最佳方法是重新开始使用
migrate:refresh

如果系统在有用户的生产环境中运行,则必须修复所有具有无效或未设置的
gameInfo\u id
role\u id
的用户。如果你只有几个用户,你可以手工操作。如果您有许多用户,您可以在迁移脚本中执行一些操作(在添加fk约束之前,对所有用户进行迭代并添加缺少的引用)。

我会采用另一种方法。 我会在gameInfo表中用一个user_id列引用该用户。 这样,用户就拥有许多gameInfo,而gameInfo属于用户。因为游戏信息在用户创建之前没有创建,并且已经玩过游戏

这有意义吗?

因为->nullable()似乎没有被laravel识别,所以我决定为gameInfo中的每一列指定一个默认值0,这对我来说也很好

另一方面,扭转用户和gameInfo之间的FK关系也起到了作用,所以我的问题得到了解决


非常感谢你们的回答,非常感谢你们的每一个贡献

您的错误仅仅意味着您为“gameInfo\u id”或“role\u id”提供的值在其引用的表中不存在。gameInfo表中是否有任何数据?@Shadow none,no,gameInfo是用户在我们制作的游戏中获得的分数表。我试图做到的是,当一个新用户注册一个帐户时,它会在gameInfo中创建一个新行,gameInfo\u id外键将引用该行。默认情况下,此新创建行的列可以设置为0。如果有帮助,则不应将其设置为0,应将其设置为null。我不是拉威尔的专家。是不是
$table->integer('gameInfo_id')->unsigned()代码生成一个没有默认值的可空字段?是的,这对我来说很有意义:)我首先要尝试一下评论中给我的一些选项,然后我可能还会实现你的建议,谢谢!