首页 > 解决方案 > 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');
}

标签: phplaravel

解决方案


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

所以managedByUsernamemanager_id.

然后,你可以将你的 Eloquent 关系写成:

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

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

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


推荐阅读