我有一个叫Championship的模型。锦标赛可能有3名裁判,分别称为主裁判、主秘书和裁判操作员。
所有这些都链接到用户模型,并作为用户ID存储在数据库中。
我的关系看起来像
class Championship extends Model
{
protected $table = 'championships';
public function mainJudge()
{
return $this->hasOne('AppUser', 'id', 'main_judge');
}
public function mainSecretary()
{
return $this->hasOne('AppUser', 'id', 'main_secretary');
}
public function judgeOperator()
{
return $this->hasOne('AppUser', 'id','judge_operator');
}
}
但我无法理解如何在用户模型中定义逆关系
class User extends Authenticatable
{
public function sex()
{
return $this->belongsTo('AppModelsSex');
}
public function player()
{
return $this->hasOne('AppModelsPlayer', 'user_id');
}
public function championship()
{
????
}
您只需要像添加其他关系一样添加它:
public function championship()
{
return $this->belongsTo('AppChampionship');
}
当你这样做:
$championship = Championship::find($id);
$mainJudge = $championship->mainJudge;
$mainSecretary = $championship->mainSecretary;
// All objects will be exactly same
dd($mainJudge->championship,$mainSecretary->championship,$championship);
我假设所有用户记录都有一个指向championships
表championship_id
的外键
当您调用$user->championship
关系时,它会将championship
wrt返回给它的外键championship_id
无需担心,您只是混淆了反向关系:
这样看:
您的mainJudge
、mainSecretary
、judgeOperators
属于AppUser
类型,每个用户都有一个championship_id
。当您呼叫(AppUser)->championship
时,它将始终返回您各自的冠军,如果championship_id
为空,则返回null
。这只是观点问题。
只要尝试上面的代码,它就会消除你的困惑。