Laravel按查询字符串过滤

时间:2018-07-01 18:12:45

标签: php laravel

我通过网址?color=green&&size=xxl;中的查询

在我的控制器中,我使用

查询
$request->query(); 

返回

  {"color":"green","size":"xxl"}

如何搜索表格选项中'option'列应具有'color''size'以及相应的< em>“值” 列应为“绿色”和“ xxl”

修改 这是Variation模型

class Variation extends Model
{
     public function sku()
     {
        return $this->belongsTo(Sku::class);
     }

     public function opt()
     {
        return $this->belongsTo(Option::class, 'option_id');
     }

     public function product()
     {
        return $this->belongsTo(Product::class);
     }
}

控制器方法:

 public function productQ(Request $request,$slug,$sku)
    {    

        $query = $request->query();
        $condition = [];

        Variation::where($query)->get();

    }

更新: Alihossein shahabi的solution进行了一些修改

 $my_query=Variation::query();
  foreach ($request->query() as $key=>$value)
  {
      $my_query->where('option',$key)->where('value',$value);
  }

   return   $result= $my_query->get();

3 个答案:

答案 0 :(得分:0)

尝试一下:

Products::where(function($query) {
    $query->where('option', '=', 'color')->where('values', '=', 'green')
})
->where(function($query) {
    $query->where('option', '=', 'size')->where('values', '=', 'xxl')
});

答案 1 :(得分:0)

请尝试

public function productQ(Request $request,$slug,$sku)
{    
    $query = new Variation();

    $searchable = $query->getFillable();
    $queryParams = $request->all();

    foreach ($queryParams as $field => $value) {
        if (in_array($field, $searchable) {
            $query = $query->where($field, $value);
        }
    }

    $variations = $query->get();
}

答案 2 :(得分:0)

您可以使用以下代码:

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

$result= $my_query->get();

或者您可以使用由SQL插入的dd($my_query->toSql());来查看$my_query->get();