如何解决Laravel - 如何根据员工和登录用户获取公司详细信息
公司
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,'id');
}
public function user()
{
return $this->belongsTo(User::class,'id');
}
我开始了这个,但在路上被卡住了。我想根据登录的用户选择公司详细信息。公司表应该是主表:
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::...;
制作主模型
解决方法
我不确定您是希望从用户那里获得多家公司,还是只获得一家公司。我不确定的原因是您已经定义了公司和员工之间的 1-1 关系,但看起来您希望 getMyCompany() 返回多个公司。
如果只想检索员工工作的一家公司,您可以使用员工的“belongsTo”关系如下:
$company = $employee->company;
由于您已经检索到与经过身份验证的用户相关的员工,并且员工模型具有“公司”关系。
如果您想一次性完成,可以链接查询:
$company = Employee::where('user_id',Auth::user()->id)
->first()
->company;
,
为此使用 Eloquent Eager 加载,因为 Employee
模型对 belongsTo
具有 company
关系
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 了解 Laravel 中的 Eager Loading 的工作原理
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。