首页 > 解决方案 > Laravel - 如何根据员工和登录用户获取公司详细信息

问题描述

在我的 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');
}

我开始了这个,但在路上卡住了。我想根据登录的用户选择公司详细信息。公司表应该是主表:

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::...;

制作主模型

标签: laravellaravel-relationslaravel-models

解决方案


我不确定您是否希望从用户那里获得多家公司,或者只是一家。我不确定的原因是您已经定义了公司和员工之间的 1-1 关系,但看起来您希望 getMyCompany() 返回多个公司。

如果这个想法是只检索员工工作的一家公司,您可以使用员工的“belongsTo”关系,如下所示:

$company = $employee->company;

由于您已经检索到与经过身份验证的用户相关的员工,并且员工模型具有“公司”关系。

如果您想一次性完成,可以链接查询:

$company = Employee::where('user_id', Auth::user()->id)
                     ->first()
                     ->company;

推荐阅读