Laravel ORM关系 - 经理 - 员工在同一个用户表上

时间:2018-05-15 06:12:18

标签: laravel orm

我有一个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');
}

这是否有意义,或者您是否知道实施此类结构的更好方法?

1 个答案:

答案 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')
}