【问题标题】:How can I "filter" a ManyToMany child in Laravel Eloquent如何在 Laravel Eloquent 中“过滤”ManyToMany 孩子
【发布时间】:2020-10-23 13:51:06
【问题描述】:

首先是一些上下文

我正在开发一个公司应用程序,在这个应用程序中,用户可以访问多个公司。 同一用户可以分配给每个公司中的一个员工。为了防止用户创建多个用户帐户,用户将通过数据透视表“连接”到公司和“公司员工”。

问题

我在 laravel 中有一个带有 users() 属性的 Company 模型,它按预期工作(因为它返回所有通过数据透视表连接到业务的用户)。

在我的用户模型中,我有一个 employee() 属性,这将返回 所有 通过数据透视表链接到用户的员工,包括未链接到所请求业务的员工/不具有与请求的业务 ID 相同的 business_fk 值。

我需要通过数据透视表获取与请求的业务和用户相关联的单个员工。

所以我想我需要通过 Company 模型中 users() 属性中的 business_fk 键过滤 User -> Employee 关系,但我不知道如何。

型号:公司

public function users()
{
    return $this->belongsToMany(User::class, 'user_employee_pivot', 'employee_fk', 'user_fk')
    ->withPivot('ID');
}

模型:用户

public function employee()
{
    return $this->belongsToMany(Employee::class, 'user_employee_pivot', 'user_fk', 'employee_fk')
    ->withPivot('ID');
}

简化表结构

TABLE users
ID           PK INT
username     STRING

--------

TABLE company
ID      PK INT
name    STRING

--------

TABLE employee
ID          PK INT
fullname    STRING
company_fk  FK INT (referencing to company table PK)

--------

TABLE user_business_pivot
ID            PK INT
user_fk       FK INT (referencing to user table PK)
company_fk    FK INT (referencing to company table PK)

--------

TABLE user_employee_pivot
ID            PK INT
user_fk       FK INT (referencing to user table PK)
employee_fk   FK INT (referencing to employee table PK)

如果我不够清楚,请告诉我。我将相应地编辑我的问题。

【问题讨论】:

  • 我的回答对你有帮助还是你还有问题?

标签: mysql laravel eloquent foreign-keys


【解决方案1】:

你可以通过过滤关系来获取员工,因为它是belongsToMany员工应该是员工。

public function getEmployeesByCompany(User $user, Company $company) {
    return $user->employees()->where('company_fk', $company->id)->get();
}

这个方法可以很容易地在用户模型或类似模型上完成,这只是一个例子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 2021-09-18
    • 1970-01-01
    • 2022-08-15
    • 1970-01-01
    • 2012-11-11
    • 2015-04-10
    相关资源
    最近更新 更多