如何在Laravel上建立没有主键的用户表和其他人的关系

时间:2019-04-22 06:02:10

标签: laravel

我为用户表分配了一个外键(clinic_uuid,而不是主键)给诊所表,如下所示。

$table->foreign('clinic_uuid',100)->references('clinic_uuid')->on('clinics');

迁移后,我向诊所模型添加了“大量用户”关系。

public function users(){
 return $this->hasMany(User::class);
}

还有与用户模型的“属于诊所”关系

public function clinic(){
   return $this->belongsTo(Clinic::class,'clinic_uuid');
}

之后,我将一些添加到诊所表中。

    clinic_uuid       name
----------------------------------
       a1111       dog clinic
       a2222       cat clinic

还有用户表。

  id    clinic_uuid       name
----------------------------------
  1       a1111           jame
  2       a1111           matt

然后,我按以下代码尝试使用控制器,但我只得到null。

Auth::user()->clinic()->get();   --> get null
User::find(1)->clinic()->get();  --> get null

感谢所有建议。

2 个答案:

答案 0 :(得分:0)

尝试一下,

User::with('clinic')->findOrFail(auth()->id());

尝试使用紧急加载Laravel Eager Loading

希望这会有所帮助:)

答案 1 :(得分:0)

您将需要告诉Eloquent这两种关系的本地和外键分别是什么,因为它们都不遵循默认约定:

public function clinic()
{
    return $this->belongsTo(Clinic::class, 'clinic_uuid', 'clinic_uuid');
}
public function users()
{
    return $this->hasMany(User::class, 'clinic_uuid', 'clinic_uuid');
}

由于两个表的列名相同,因此在此示例中并不重要,但是您始终可以参考docs来确定关系方法中哪个列名应该放在哪里。