代码之家  ›  专栏  ›  技术社区  ›  Viktor

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

  •  1
  • Viktor  · 技术社区  · 7 年前

    我有一个模型叫做冠军。锦标赛可设3名裁判,分别为主裁判、主秘书和主裁判长。

    它们都链接到用户模型并作为用户ID存储在数据库中。

    我的关系是这样的

    class Championship extends Model
    {
        protected $table = 'championships';
    
        public function mainJudge()
        {
            return $this->hasOne('App\User', 'id', 'main_judge');
        }
    
        public function mainSecretary()
        {
            return $this->hasOne('App\User', 'id', 'main_secretary');
        }
    
        public function judgeOperator()
        {
            return $this->hasOne('App\User', 'id','judge_operator');
        }
    }
    

    class User extends Authenticatable
    {
        public function sex()
        {
            return $this->belongsTo('App\Models\Sex');
        }
    
        public function player()
        {
            return $this->hasOne('App\Models\Player', 'user_id');
        }
    
        public function championship()
        {
        ????
        }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Omar Abdullah    7 年前

    您只需添加它,就像添加其他关系一样:

    public function championship()
    {
       return $this->belongsTo('App\Championship');
    }
    

    $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 冠军\u id

    不用担心,你只是混淆了反向关系:

    这样看:

    你的 mainJudge mainSecretary , judgeOperators App\User 每个用户都有一个 你什么时候打电话给 (App\User)->championship 它将始终返回给你其各自的冠军或冠军 null 冠军\u id 是空的。

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