微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel - 如何根据员工和登录用户获取公司详细信息

如何解决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,'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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?