Laravel - 如何根据员工和登录用户获取公司详细信息
Posted
技术标签:
【中文标题】Laravel - 如何根据员工和登录用户获取公司详细信息【英文标题】:Laravel - How to get company detail based on employee and logged user 【发布时间】:2021-09-28 01:24:42 【问题描述】:在我的 Laravel 8 应用程序中,我有以下模型。
公司
protected $fillable = [
'id',
'name',
'website',
'company_logo',
'registration_number',
'date_established',
'address',
];
员工
protected $fillable = [
'id',
'company_id',
'user_id',
'first_name',
'last_name',
'other_name',
'gender',
];
public function company()
return $this->belongsTo(Company::class,'company_id','id');
public function user()
return $this->belongsTo(User::class,'user_id','id');
我开始了这个,但在路上卡住了。我想根据登录的用户选择公司详细信息。 company 表应该是主表:
public function getMyCompany()
try
$userId = Auth::user()->id;
$employeeId = Employee::where('user_id', $userId)->first();
$company = Company::...;
return $this->success('Company successfully Retrieved.', [
'company' => $company
]);
catch (\Exception $e)
Log::error($e);
return $this->error($e->getMessage(), $e->getCode());
我如何实现这一点(选择公司的所有详细信息):
$company = Company::...;
制作主模型
【问题讨论】:
所以你想从 Auth::user() 获得公司的详细信息? 这个问题需要更清楚。从模型上看,Employee belongsTo 1 家公司,但您正在尝试检索公司?您是要检索员工所属的公司还是要检索所有公司? @Abishek - 我只检索一家公司。员工属于公司。我只需要为 Employee 找一家公司。公司应该是主要模式。请参阅上述模型中的插图 @user11352561,请确保您使用的变量名称在这种情况下是单数的,我已经编辑了问题以表示这一点,但请记住供您参考,否则这会给人们造成不必要的混淆试图帮助你。如果您尝试为员工检索公司,则它应该是$company
而不是 $companies
。它是一对一的关系
【参考方案1】:
我不确定您是否希望从用户那里获得多家公司,或者只是一家。我不确定的原因是您已经定义了公司和员工之间的 1-1 关系,但看起来您希望 getMyCompany() 返回多个公司。
如果想法是只检索员工工作的一家公司,您可以使用员工的“belongsTo”关系,如下所示:
$company = $employee->company;
由于您已经检索到与经过身份验证的用户相关的员工,并且员工模型具有“公司”-关系。
如果您想一次性完成,可以链接查询:
$company = Employee::where('user_id', Auth::user()->id)
->first()
->company;
【讨论】:
员工属于公司。我只需要为 Employee 找一家公司。公司应该是主要模式。请参阅上述模型中的插图。 @Megadöden,Eager Loading 比懒加载好.. 你说得对,@Abishek。 Employee::with('company')->where(...) 效率更高。【参考方案2】:为此使用 Eloquent Eager 加载,因为 Employee
模型与 company
具有 belongsTo
关系
public function getMyCompany()
try
$userId = Auth::user()->id;
$employee = Employee::with('company')->where('user_id',$userId)->first();
$company = $employee->company
return $this->success('Company successfully Retrieved.', [
'company' => $company
]);
catch(\Exception $e)
Log::error($e);
return $this->error($e->getMessage(), $e->getCode());
请参阅:https://laravel.com/docs/8.x/eloquent-relationships#eager-loading 了解 Eager Loading 在 Laravel 中的工作原理
【讨论】:
以上是关于Laravel - 如何根据员工和登录用户获取公司详细信息的主要内容,如果未能解决你的问题,请参考以下文章