当前位置: 首页 > 知识库问答 >
问题:

未使用laravel迁移创建外键

常嘉平
2023-03-14

我想在用户表中添加一个外键:

一个用户有一个城镇(法语为ville),一个城镇可以有多个用户:

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->string('adresse');

        //un user à une seule ville
        //une ville peut avoir plusieurs users
        $table->unsignedBigInteger('villes');

        $table->foreign('villes_id')->references('id')->on('villes');
        ...


        $table->timestamps();
    });
}

我的村庄(城镇)迁移

public function up()
{
    Schema::create('villes', function (Blueprint $table) {
        $table->id();
        $table->string('nom',100);
        $table->integer('cp');
        $table->string('pays',50);
        $table->timestamps();
    });
}

我重命名了迁移(我不知道这样做是否有好处?),这是我迁移的顺序,正如您所看到的,我在用户之前创建了villes:

我在终端中发现了这个错误:

照亮\数据库\查询异常

SQLSTATE[42000]:语法错误或访问冲突:1072键列“villes\u id”在表中不存在(SQL:alter tableusersadd constraintusers\u villes\u id\u foreign外键(villes\u id)引用villesid

共有1个答案

朱运诚
2023-03-14

它不起作用,因为您将外键设置在不存在的列上。列名是Villes,但您的设置外键在villes_id

像这样更改列名:

Schema::create('users', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->string('adresse');

    $table->unsignedBigInteger('villes_id');
    $table->foreign('villes_id')->references('id')->on('villes');
    // ...

    $table->timestamps();
});
 类似资料:
  • 我有一个问题与我的Laravel迁移:( 当我运行php artisan migrate时,它会在外键上停止。 首次迁移 还有第二个 运行命令后,我出现以下错误: [Illumb\Database\QueryException] SQLSTATE[HY000]:一般错误:1005无法创建表gsb_larave.35; sql-176_b9(错误号:150“外键约束格式不正确”)(sql:alter

  • 我正在从事一个项目,我正在使用laravel 5.8。这里我想创建一个外键。我试了很多次,但每次都收到一条关于迁移时间的错误消息。有三个表一个是行业,是小学和学生,这些是第二个表。我想在这两个辅助表trade_id上创建一个外键作为键的名称。 这是交易表(主表)。 这是学生表(辅助表)。 这是放置表(辅助表)。 在迁移时出现错误。

  • 我创建了一个名为用户的表。有一些表被称为公司、名称、部门。我想添加company_id,designation_id,department_id列到用户表作为外键。 我试过了,但没用 当我迁移迁移时,它会显示此错误。 Illumb\Database\QueryException:SQLSTATE[HY000]:一般错误:1005无法创建表(错误号:150“外键约束格式不正确”)(SQL:alter

  • Laravel版本:5.7 PHP版本: 7.2.9 数据库驱动程序 说明上次迁移创建表,但未在迁移表中注册 繁殖步骤我有14个迁移。如果我运行的表被创建,但没有注册为运行迁移我已经丢弃了家庭数据库几次 我的迁移状态表 最终,当我想刷新、回滚或迁移以进行开发时,我会收到这样一个错误,告诉我表存在,但不在迁移中 Illumb\Database\QueryException:SQLSTATE[42S0

  • Laravel5.6运行于:PHP7.2,MariaDB 10.3 当我想为我的表设置外键时,我只是不断地犯这个错误。 在其他表中,由Laravel本身定义的所有id变量和无符号自动增量 所以,我的迁移是这样的: 错误如下所示: SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以了解在LINE 1(SQL:alter

  • 我花了一整天的时间试图弄清楚下面的迁移发生了什么。 这是表的迁移。我的想法是使用“id_stays_abroad”和“user_id”作为外键。 这是添加外键的另一个迁移 当我运行php artisan迁移时,我遇到了以下错误: SQLSTATE[HY000]:一般错误:1215无法添加外键约束(SQL:alter table