【问题标题】:Get all types Belong to employee and return this type获取属于员工的所有类型并返回该类型
【发布时间】:2022-01-18 05:38:32
【问题描述】:

我有 4 个表,分别是用户表、规则表、rule_requests 表和 rule_employee 表。查找下表。

用户表

id name
10 test1
12 test2
13 test3

规则

id active
1 true
2 true

规则请求

rule_id request_type
1 Normal leave
2 Sick leave

规则员工表

id user_id
1 10
2 12

我要做的是只返回请求正常休假的用户,并且返回查询必须选择 request_type 列,因为我需要在本地化中使用它

我尝试使用此查询

Employee::where('department_id', $data['department_id'])
    ->whereIn('users.id', $data['employees_ids'])
    ->whereHas('rules', function($emp) use ($data) {
        $emp->join('rule_request_type', 'rule_request_type.rule_id', 'rules.id')
            ->select('request_type_id')
            ->whereIn('request_type_id',$data['requests_ids']);
        }
    )
    ->get();

我必须使用子查询,所以我无法检索 request_type_id 匹配案例。

【问题讨论】:

  • 您能否简要解释一下您的 Eloquent 模型关系?目前尚不清楚这些表是如何相关的。

标签: php laravel eloquent


【解决方案1】:

在这种情况下,您需要使用连接。

首先,您需要确定rulesemployees 表之间的关系。没有它,您应该如何将rule_requestemployees 表联系起来? employee_rules 之类的东西?

你可以运行这样的东西。

User::select("users.*")
 ->join("employees AS em", "em.user_id", "users.id")
 ->join("employee_rules AS er", "er.employee_id", "em.id")
 ->join("rules", "rules.id", "er.rule_id")
 ->join("rule_requests AS rr", "rr.rule_id", "rules.id")
 ->where("rr.request_type = 'Normal leave'")
 ->groupBy("users.id")
 ->get();

由于您要返回users,因此您的主表应该是用户。然后你需要在你的employees 表中加入它。然后,一旦您确定了 rulesemployees 表之间的链接,您就可以使用它来连接这两个表。确保使用inner join,它将确保您只检索只有request_type => Normal leave 的用户。

旁注:在处理大型数据库时,子查询是一个非常糟糕的解决方案。在这种情况下,联接是最好的。

干杯!

【讨论】:

    猜你喜欢
    • 2017-06-15
    • 2023-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 2012-04-04
    相关资源
    最近更新 更多