【发布时间】:2021-08-27 05:04:34
【问题描述】:
如何在 for each 循环中对某个集合重新应用 where() 语句。
我目前正在循环我的参数,我想在 where() 语句中对每个参数进行循环,以便我可以使用这些 where() 语句过滤集合
我的 foreach 在下面:它目前正在获取所有 where() 结果并将它们合并在一起,但我希望所有 where() 语句都应用于 1 个单个集合,因此它将它们过滤掉。
$guides = new Collection;
foreach($request->query() as $key => $value){
if($guides->isEmpty()){
$guides = SupportGuideTranslation::where($key, $value)->get();
}
else{
$guides = $guides->toBase()->merge(SupportGuideTranslation::where($key, $value)->get());
}
}
$guides = $guides->unique();
这些是我的参数:
?active=2&language_id=2
这是$request->query()的结果:
^ array:2 [▼
"active" => "2"
"language_id" => "2"
]
我现在的结果是我得到了 6 条记录(而不是 2 条)。
- language_id=2 和 active=1 的 3 条记录(错误)
- 1 条记录,language_id=1 和 active=2(错误)
- 2 条记录,language_id=2 和 active=2(正确)
我想要的是它只显示遵循两个参数规则的 2 条记录,而不是合并 2 个单独的集合。
【问题讨论】:
-
你可以将数组传递给 where 方法:
where($request->query()) -
@ChinhNguyen 不,那是不可能的。它返回一个空数组。
-
您需要通过
active=2 and language_id=2获得 SupportGuideTranslation 对吗? -
@ChinhNguyen 是的。
-
在 1 个查询中而不是循环中执行此操作:
SupportGuideTranslation::where($request->query())->get()
标签: php laravel eloquent laravel-query-builder laravel-collection