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

时间:2018-11-14 09:03:57

标签: laravel-5 eloquent

我有一个称为冠军的模型。锦标赛可能有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 个答案:

答案 0 :(得分:1)

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

Foo(x);
...
static void Foo<T>(T a, bool b = false) where T : class { } // 3
static void Foo<T>(T a) where T : struct { } // 3

操作时:

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

不用担心,您只是在混淆逆向关系:

以这种方式查看:

您的championship_idmainJudgemainSecretary的类型为judgeOperators,每个用户在呼叫App\User时都有一个championship_id将始终为您返回其各自的冠军头衔;如果(App\User)->championship为空,则将返回null。 这只是透视问题。

只需尝试上面的代码,即可清除您的困惑。