Laravel如何用一个模型定义3种关系



我有一个叫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); 

我假设所有用户记录都有一个指向championshipschampionship_id 的外键

当您调用$user->championship关系时,它会将championship wrt返回给它的外键championship_id

无需担心,您只是混淆了反向关系:

这样看:

您的mainJudgemainSecretaryjudgeOperators属于AppUser类型,每个用户都有一个championship_id。当您呼叫(AppUser)->championship时,它将始终返回您各自的冠军,如果championship_id为空,则返回null。这只是观点问题。

只要尝试上面的代码,它就会消除你的困惑。

最新更新