我有一个称为冠军的模型。锦标赛可能有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()
{
????
}
答案 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_id
,mainJudge
,mainSecretary
的类型为judgeOperators
,每个用户在呼叫App\User
时都有一个championship_id
将始终为您返回其各自的冠军头衔;如果(App\User)->championship
为空,则将返回null
。
这只是透视问题。
只需尝试上面的代码,即可清除您的困惑。