提问者:小点点

为每个循环重新应用laravel其中的语句


当处于for-each循环时,如何对特定集合重新应用where()语句。

我现在正在循环我的参数,我想在where()语句中为每个参数设置一个循环,这样我就可以用这些where()语句过滤一个集合

下面是我的foreach:它当前正在获取所有where()结果并将它们合并在一起,但我希望所有where()语句都应用于一个集合,以便将它们过滤掉。

        $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

这是$请求的结果-

^ array:2 [▼
  "active" => "2"
  "language_id" => "2"
]

我现在的结果是我得到了6条记录(而不是2条)。

  • 3条语言为2且活动为1的记录(错误)
  • 1条记录的语言为\u id=1且活动=2(错误)
  • 2语言为2且活动为2的记录(正确)

我想要的是,它只显示遵循两个参数规则的2条记录,而不是合并2个独立的集合。


共1个答案

匿名用户

您可以在不执行查询的情况下添加到QueryBuilder,您所做的是每次迭代执行一个查询。因此,建立正确的查询,然后执行它。

$query = SupportGuideTranslation::query();

foreach ($request->query() as $key => $value) {
    $query->where($key, $value);
}

$translations = $query->get();