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');