【发布时间】:2015-05-26 02:43:45
【问题描述】:
我有一个数据库,里面控制着一些orders,每个订单有很多items,自然是一个属于某个部门的用户提交的订单。
每个用户都属于某个角色,因此订单由具有不同更高角色的不同users 连续审核。我使用delegate 字段控制下一个应该对订单执行操作的用户。
我将描述我的一些表格及其相关字段:
Department:
- id
- name
User:
- id
- name
- department_id
- role
Order:
- id
- user_id
- delegate // Here I got an enum for the multiple roles a user can get
Revision:
- id
- order_id
- user_id
- operation
查询
所以我需要的是一个查询来检索其用户属于给定department_id 的所有订单,并且delegate 字段等于一个提供的参数或revisions 表中有记录user_id等于另一个提供的参数
我得到了什么......
在 Eloquent ORM 的帮助下,我得到了我所需结果的第一部分的这种查询方式:
select `orders`.*, `users`.`department_id` from `orders` inner join `users` on `users`.`id` = `orders`.`user_id` where `users`.`department_id` = '1' and `delegate` = 'GERENTE DE DEPARTAMENTO' limit 2 offset 0
为了包含 OR,其中revisions 表中有记录,user_id 等于另一个提供的参数我尝试将查询的一部分附加到查询:
JOIN orders on revisions WHERE user_id = 5
但是没用……
我尝试的整个查询是:
select `orders`.*, `users`.`department_id` from `orders` inner join `users` on `users`.`id` = `orders`.`user_id` where `users`.`department_id` = '1' and `delegate` = 'GERENTE DE DEPARTAMENTO' JOIN orders on revisions WHERE user_id = 5
示例
我在查询示例中使用硬编码参数,因为它们来自真实示例……在这种情况下,我只需要获取用户属于 deparment_id 1、delegate 的整个订单是 'GERENTE DE DEPARTAMENTO'或者如果revisions 表中有行将user_id 设置为5
Orders:
+----+---------+-------------------------+
| id | user_id | delegate |
+----+---------+-------------------------+
| 1 | 4 | GERENTE DE DEPARTAMENTO |
| 2 | 2 | SUPERVISOR DE COMPRAS |
+----+---------+-------------------------+
Revisions:
+----+---------+----------+
| id | user_id | order_id |
+----+---------+----------+
| 1 | 5 | 2 |
| 2 | 5 | 2 |
+----+---------+----------+
一个有效的查询应该只接受订单 1 和 2。 我怎样才能完成它?我对所需的 MySQL 很感兴趣,如果它是基于 Eloquent 的查询,我是一个 PLUS。
【问题讨论】:
标签: mysql laravel join eloquent