Laravel 数据库模型自身之间的关系
Larave database model relation between itself
我对如何设计一个自身之间有关系的模型有一些疑问。
在我的例子中,我有一个用户 table,id 为 coach_id。所有用户都有一个 ID(显然),但具有 Runner 角色的用户也 coach_id 引用了具有 Coach 角色的用户。
第一步是如何在 laravel table 迁移中创建密钥,然后是如何在用户模型中添加正确的关系。
首先,确保coach_id
可以为NULL:
$table->unsignedInteger('coach_id')->nullable();
如果模型 ID 使用大整数,则使用 unsignedBigInteger
。
然后定义一个外键:
$table->foreign('coach_id')
->references('id')
->on('users')
->onDelete('set null');
使用set null
而不是cascade
,因为您不想在删除教练时删除相关用户。
并在User
模型中建立一对多关系:
public function coach() {
return $this->belongsTo(self::class);
}
从 Laravel > 7 您可以在迁移中使用快捷方式:
$table->foreignId('coach_id')
->nullable()
->constrained('users')
->onDelete('set null');
我对如何设计一个自身之间有关系的模型有一些疑问。
在我的例子中,我有一个用户 table,id 为 coach_id。所有用户都有一个 ID(显然),但具有 Runner 角色的用户也 coach_id 引用了具有 Coach 角色的用户。
第一步是如何在 laravel table 迁移中创建密钥,然后是如何在用户模型中添加正确的关系。
首先,确保coach_id
可以为NULL:
$table->unsignedInteger('coach_id')->nullable();
如果模型 ID 使用大整数,则使用 unsignedBigInteger
。
然后定义一个外键:
$table->foreign('coach_id')
->references('id')
->on('users')
->onDelete('set null');
使用set null
而不是cascade
,因为您不想在删除教练时删除相关用户。
并在User
模型中建立一对多关系:
public function coach() {
return $this->belongsTo(self::class);
}
从 Laravel > 7 您可以在迁移中使用快捷方式:
$table->foreignId('coach_id')
->nullable()
->constrained('users')
->onDelete('set null');