【发布时间】:2021-06-08 11:20:37
【问题描述】:
我对如何设计一个具有自身关系的模型有一些疑问。
就我而言,我有一个带有 id 和 coach_id 的用户表。所有用户都有一个 id(显然),但角色 Runner 的用户也有 coach_id 引用角色为 Coach 的用户。
第一步是如何在 laravel 表迁移中创建 key,然后是如何在 User 模型中添加正确的关系。
【问题讨论】:
标签: database laravel model relationship
我对如何设计一个具有自身关系的模型有一些疑问。
就我而言,我有一个带有 id 和 coach_id 的用户表。所有用户都有一个 id(显然),但角色 Runner 的用户也有 coach_id 引用角色为 Coach 的用户。
第一步是如何在 laravel 表迁移中创建 key,然后是如何在 User 模型中添加正确的关系。
【问题讨论】:
标签: database laravel model relationship
首先,确保coach_id 可以为NULL:
$table->unsignedInteger('coach_id')->nullable();
如果模型 id 使用大整数,则使用 unsignedBigInteger。
然后定义一个外键:
$table->foreign('coach_id')
->references('id')
->on('users')
->onDelete('set null');
使用set null 而不是cascade,因为您不想在删除coach 时删除相关用户。
并在User模型中建立一对多关系:
public function coach() {
return $this->belongsTo(self::class);
}
从 Laravel > 7 你可以在迁移中使用快捷方式:
$table->foreignId('coach_id')
->nullable()
->constrained('users')
->onDelete('set null');
【讨论】: