我有一个user_managers
数据透视表,可以从users表中获取两个键:
employer_user_id
employee_user_id
我相信用户会有多对多的关系,因为用户可以由超过1名管理员管理,会有管理1个或更多用户的用户,而其他用户(不包括其他用户) )会管理他们,而根本没有管理的用户和User
只能有1位经理。
我第一次尝试定义这个是构建另一个名为Manager
的模型,代表user_managers
数据透视表,所以在User
模型中我编写了以下两个函数:
public function managedBy()
{
return $this->belongsToMany('Manager', 'employer_user_id');
}
public function manages()
{
return $this->hasMany('Manager', 'employee_user_id', 'employer_user_id');
}
这是否有意义,或者您是否知道实施此类结构的更好方法?
答案 0 :(得分:2)
如果用户只能拥有1个经理,那么您可以将您的关系定义为一对多
//User model
public function managedBy()
{
return $this->belongsTo(User::class, 'manager_id');
}
public function managees()
{
return $this->hasMany(User::class, 'manager_id');
}
您不需要将$id
传递给您的关系定义。
对于多个经理,是的,您需要通过添加联结/数据透视表来建立多对多关系,我猜您已经拥有user_managers
,现在您需要使用belongsToMany
为经理定义关系和管委会一样
public function managers()
{
$this->belongsToMany(User::class, 'user_managers', 'employer_user_id')
}
public function managees()
{
$this->belongsToMany(User::class, 'user_managers', 'employee_user_id')
}