两个不同外键列的同一个表的外键关系

时间:2018-01-04 07:10:12

标签: php mysql sql laravel

假设我有一个用户约会表。

  

用户 - ID,姓名,电子邮件,类型(医生/病人)

     

约会 - id,doctor_user_id,patient_user_id

我的用户表数据 -

enter image description here

我的约会表数据 -

enter image description here

我可以使用用户表从约会中创建两个属于 关系

正如您可以看到我的约会表格一样,我只想将用户类型医生存储到 doctor_user_id 患者 patient_user_id 。但在这种情况下,我可以将任何用户ID添加到 doctor_user_id 字段,无论是医生还是病人,但我只想添加用户ID作为doctor_user_id,只有其类型是医生。

我知道如何使用两个不同的表来实现这一目标,但我想知道有没有办法通过单个用户表来实现这一目标,谢谢。

2 个答案:

答案 0 :(得分:3)

是的,您可以通过仅创建一个用户表来实现此目的。

约会表的“doctor_user_id”和“patient_user_id”创建2个外键,该表引用User表。

答案 1 :(得分:3)

您可以使用两个belongsToMany()关系,并在我转动时使用该表:

public function doctors()
{
    return $this->belongsToMany(User::class, 'appointment', 'patient_user_id', 'doctor_user_id');
}

public function patients()
{
    return $this->belongsToMany(User::class, 'appointment', 'doctor_user_id', 'patient_user_id');
}

如果您经常使用appointment表格,您还可以为hasMany()模型添加两个Appointment关系,并为{{1}添加两个belongsTo()关系模型。因此,在这种情况下,您可以同时使用UserbelongsToMany()hasMany()关系。