【发布时间】:2018-04-27 14:35:34
【问题描述】:
我的控制器中有以下查询。
$items = Item::with(['subitems' => function($query) {
$query->where('language_id', '=', 1);
}])->get();
这正确地让我得到了所有项目,包括语言 id 为 1 的子项目。
不过,我想做两件事
- 首先,我需要返回所有具有不同 'ref_id' 值的子项。
- 其次,我想优先使用语言 ID
1,但如果不存在,请使用任何语言 ID。
例如,我知道这段代码不起作用,但我正在寻找的东西是:
$items = Item::with(['subitems' => function($query) {
$subItems = $query->where('language_id', '=', 1)
->where('ref_id', 'is', 'distinct');
if($subItems->count() <= 0) {
$subItems = $query->where('ref_id', 'is', 'distinct');
}
}])->get();
这可能吗,还是对于查询生成器来说有点太复杂了?即使这两个请求之一是可能的,那也很好。
【问题讨论】:
-
“具有不同的 'ref_id' 值”是什么意思?每个
ref_id值返回一个子项? -
是的,没错。因此,如果有多个具有相同 ref_id 的子项,则使用第一个,而忽略其余的。抱歉,回顾一下我的问题,不清楚
-
第一个是什么?
id最低的那个? -
没关系。只要返回的第一个就可以了。所以如果我在物理上这样做,我会得到所有的子项目。然后我会将 subItems 分成组,每个 ref_id 一组。然后从每个组中,我将保留语言 id 为 1 的第一个子项。如果没有,我将只保留第一个子项,而不管语言 id 和 bin 其余的。最终,我会有一个子项目列表。每个 subItem 将有一个唯一的 ref_id 并且最好有一个语言 id 1,但不是强制性的。那有意义吗?我认为单个查询可能太复杂了。
-
您是否总是希望
language_id成为1?或者这只是一个示例值?
标签: php eloquent distinct query-builder