我有一段时间没有触及后端..如果这非常简单,请原谅我。我正在使用Lumen v.5.6.1。
| table.sets | | table.indexed_items |
|----------------| |---------------------------------|
| ID | SET | | ID | setId | itemId | have |
|----|-----------| |----|-------|--------|-----------|
| 1 | set name 1| | 1 | 3 | 1 | 2 |
| 2 | set name 2| | 2 | 3 | 2 | 1 |
| 3 | set name 3| | 3 | 3 | 3 | 4 |
| 4 | 2 | 4 | 1 |
| 5 | 2 | 5 | 3 |
| 6 | 2 | 6 | 1 |
我如何在一个查询中返回,由setId(set set as left join?)groupBy / distinct返回以获得如下返回:
[
setId: 2,
name: 'set name 2',
haveTotal: 5,
],
[
setId: 3,
name: 'set name 3',
haveTotal: 7,
]
答案 0 :(得分:1)
这是一个应该有效的原始MySQL查询。要将其转换为Laravel应该不会太多工作,尽管您可能需要使用DB::raw
一次或两次。
SELECT
s.ID AS setId,
s.`SET` AS name,
COALESCE(SUM(ii.have), 0) AS haveTotal
FROM sets s
LEFT JOIN indexed_items ii
ON s.ID = ii.setId
GROUP BY
s.ID;
如果您不想返回indexed_items
表中没有条目的集,那么您可以删除对COALESCE
的呼叫,也可以使用内部联接而不是离开加入。
请注意,使用SET
命名表和列并不是一个好主意,因为它是一个MySQL关键字。
答案 1 :(得分:1)
如果您正在使用或想要使用雄辩,您可以执行以下操作:
$sets = App\Sets::withCount('indexed_items')->get();
这将返回一个列名为indexed_items_count
显然,您需要根据型号名称进行更改。
答案 2 :(得分:1)
我总是在我的项目中使用计数关系船记录。
$sets->indexed_items->count();