laravel迁移未创建外键

时间:2020-04-13 11:14:41

标签: php laravel

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

一个用户有一个城镇(法语为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();
    });
}

我重命名了迁移(我不知道这样做是否好吗?),这是迁移的顺序,如您所见,我在用户之前创建了区:

enter image description here

我在终端中遇到此错误:

Illuminate \ Database \ QueryException

SQLSTATE [42000]:语法错误或访问冲突:1072键列 表中不存在“ villes_id”(SQL:alter table users add 约束users_villes_id_foreign外键(villes_id) 引用villesid))

1 个答案:

答案 0 :(得分:1)

它不起作用,因为您在不存在的列上设置了外键。 列名称为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();
});