Laravel 数据库模型自身之间的关系

Posted

技术标签:

【中文标题】Laravel 数据库模型自身之间的关系【英文标题】:Larave database model relation between itself 【发布时间】:2021-06-08 11:20:37 【问题描述】:

我对如何设计一个具有自身关系的模型有一些疑问。

就我而言,我有一个带有 id 和 coach_id 的用户表。所有用户都有一个 id(显然),但角色 Runner 的用户也有 coach_id 引用角色为 Coach 的用户。

第一步是如何在 laravel 表迁移中创建 key,然后是如何在 User 模型中添加正确的关系。

【问题讨论】:

【参考方案1】:

首先,确保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');

【讨论】:

以上是关于Laravel 数据库模型自身之间的关系的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.1 中 3 个模型之间的关系(“像多对多通过”)

Laravel 模型关联建立与查询

Laravel不同数据库的模型之间关联

Laravel 多关系数据获取

两个多对多相关表之间的Laravel雄辩关系

在 Laravel 4 中使用在 2 个数据库之间创建多对多关系