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');
}
解决方案
解决此问题的最佳方法是使用用户的 id 作为经理的外键。
所以managedByUsername
用manager_id
.
然后,你可以将你的 Eloquent 关系写成:
public function mananager()
{
return $this->belongsTo(User::class, 'manager_id');
}
public function employees()
{
return $this->hasMany(User::class, 'manager_id');
}
希望这有助于解决您的问题。
推荐阅读
- android - 使用无头 JS 为 android 反应原生计步器
- php - 如何在 PHP 中将图像添加到 SQL Server
- android - 在用户使用 Paging3 滚动时刷新数据 - RemoteMediator
- google-apps-script - Google App Script - TypeError - 无法读取未定义的属性“长度”
- javascript - 为什么电子的窗口没有隐藏?
- axios - 删除请求适用于 Postman 和 api 文档,但不适用于轴
- c - 如何在 printf 中使用引号
- javascript - 使用字符串数组访问对象
- r - 带有行过滤器的 gt 表着色整列
- arm - 运行 SPEC CPU2006 时发生错误
: 致命: writeBlob(0, ...) 失败