代码之家  ›  专栏  ›  技术社区  ›  Sai Krishna

按查询字符串筛选

  •  0
  • Sai Krishna  · 技术社区  · 6 年前

    我在url中传递查询 ?color=green&&size=xxl;

    在我的控制器中,我用

    $request->query(); 
    

    它又回来了

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

    如何搜索表变量 '选项' 列应该有 '颜色' '大小' 以及相应的 '值' 列应该有'green和'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();
    
        }
    

    更新: 沙哈比的 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 回复  |  直到 6 年前
        1
  •  0
  •   Alihossein shahabi    6 年前

    您可以使用以下代码:

    $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();

        2
  •  0
  •   dpattayath    6 年前

    试试这个:

    Products::where(function($query) {
        $query->where('option', '=', 'color')->where('values', '=', 'green')
    })
    ->where(function($query) {
        $query->where('option', '=', 'size')->where('values', '=', 'xxl')
    });
    
        3
  •  0
  •   Mahbub    6 年前

    请试试看

    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();
    }