我想在用户表中添加一个外键:
一个用户有一个城镇(法语为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();
});
}
我重命名了迁移(我不知道这样做是否好吗?),这是迁移的顺序,如您所见,我在用户之前创建了区:
我在终端中遇到此错误:
Illuminate \ Database \ QueryException
SQLSTATE [42000]:语法错误或访问冲突:1072键列 表中不存在“ villes_id”(SQL:alter table
users
add 约束users_villes_id_foreign
外键(villes_id
) 引用villes
(id
))
答案 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();
});