【问题标题】:Laravel how to define 3 relationships with one model?Laravel如何用一个模型定义3个关系?
【发布时间】:2018-11-14 09:03:57
【问题描述】:

我有一个名为 Championship 的模型。锦标赛可能有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()
    {
    ????
    }

【问题讨论】:

    标签: laravel-5 eloquent


    【解决方案1】:

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

    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); 
    

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

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

    不用担心你只是混淆了逆关系:

    这样看:

    您的mainJudgemainSecretaryjudgeOperators 的类型为App\User,并且每个用户都有一个championship_id,当您调用(App\User)->championship 时,它将始终返回您各自的冠军或null,如果championship_id 为空。 它只是视角问题。

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

    【讨论】:

      猜你喜欢
      • 2021-08-29
      • 2018-12-07
      • 1970-01-01
      • 1970-01-01
      • 2018-04-15
      • 1970-01-01
      • 2017-01-20
      • 1970-01-01
      • 2018-10-17
      相关资源
      最近更新 更多