Laravel:同一张桌子上的关系

时间:2018-10-23 09:14:59

标签: php laravel

在我的应用程序中,我有一个users表,该表中有一个名为managedByUsername的字段,该字段是该特定用户的管理员的用户名。

要具体了解您的员工,可以执行以下查询:

$employees = User::where('managedByUsername', auth()->user->username)->get()

要获得您的经理,可以在用户模型上建立关系;

public function mananager()
{
    return $this->belongsTo(User::class, 'username', 'managedByUsername');
}

但是,我想不出您将如何做?

也许

public function employees()
{
    return $this->hasMany(User::class, 'username', 'managedByUsername');
}

但这显然行不通。

我也尝试了以下方法:

/**
 * Get the manager for this user
 *
 * @return void
 */
public function mananager()
{
    return $this->belongsTo(User::class, 'managedByUsername', 'username');
}

/**
 * Get the manager for this user
 *
 * @return void
 */
public function employees()
{
    return $this->hasMany(User::class, 'managedByUsername', 'username');
}

1 个答案:

答案 0 :(得分:0)

解决此问题的最佳方法是使用用户的ID作为管理员的外键。

因此将managedByUsername字段替换为manager_id

然后,您可以将雄辩的关系写成:

public function mananager()
{
  return $this->belongsTo(User::class, 'manager_id');
}

public function employees()
{
  return $this->hasMany(User::class, 'manager_id');
}

希望这有助于解决您的问题。