【问题标题】:How can I retrieve data from a table in laravel with multiple array conditions如何从具有多个数组条件的 laravel 表中检索数据
【发布时间】:2016-10-17 14:35:10
【问题描述】:

我正在电子商务网站中应用搜索过滤器。在这里,客户可以选择各种领域,如颜色、形状、价格、对称、抛光、清晰度和其他各种东西。 当客户选择任何选项时,它应该添加到他选择的最后一个选项中。所以他/她可能有必须获取和显示的条件组合。 对于一个数组条件,我可以在 laravel 中使用 whereIn,但对于多个数组条件,我应该使用什么。我不确定哪个数组将为空。

这是我的过滤器代码:-

public function Filter(Request $request)
{
    $conditions = array();
    if($request->isMethod('post')) {
        $data = array_filter($request->all());

        $shapes = array();
        $amount = array();
        $carat  = array();
        $cut  = array();
        $color = array();
        $clarity = array();
        $cerifying_agency = array();
        $flourscence = array();
        $polish = array();
        $symmetry = array();
       // $conditions=array();
        if(isset($data['shape'])){
            $shapes = $data['shape'];
        }
        if(isset($data['amount'])){
            $amount = $data['amount'];
        }
        if(isset($data['carat'])){
            $carat = $data['carat'];
        }
        if(isset($data['cut'])){
            $cut = $data['cut'];
        }
        if(isset($data['color'])){
            $color = $data['color'];
        }
        if(isset($data['clarity'])){
            $clarity = $data['clarity'];
        }
        if(isset($data['ca'])){
            $cerifying_agency = $data['ca'];
        }
        if(isset($data['fl'])){
            $flourscence = $data['fl'];
        }
        if(isset($data['polish'])){
            $polish = $data['polish'];
        }
        if(isset($data['symmetry'])){
            $symmetry = $data['symmetry'];
        }

    }
}

我附上了 UI 的快照和在过滤器函数的数组中调用的 ajax 的数据格式:-Sorry I couldnt embed the picture as Stackoverflow is not allowing me to do so

【问题讨论】:

    标签: php laravel laravel-5 laravel-5.1


    【解决方案1】:

    你可以使用类似这样的函数:

    function appendFilter($query, $array, $fieldName){
        return $query->where(function($query) use ($array, $fieldName) {
            $query->whereIn($fieldName, $array)->orWhereRaw(empty($array) ? "true" : "false");
        });
    }
    

    你可以这样使用它:

    $productQuery = DB::table("products");
    $productQuery = appendFilter($productQuery, $shapes, "shape");
    $productQuery = appendFilter($productQuery, $otherFilters, "otherField");
    $results = $productQuery->get();
    

    这个函数的作用是将嵌套的 where 附加到 执行 WhereIn 的第一部分,但它也有 orWhereRaw 在数组为空的情况下附加原始“true”值(否则为假) 因此,如果您的过滤值数组为空,则不会影响您选择的值。

    【讨论】:

      【解决方案2】:

      嗯,你可以像普通的whereIn 一样使用这些条件。

      例如:

      $posts = Post::latest();
      
      if($request->has('carat')) 
      {
          $posts->whereIn('carat', $request->input('carat');
      }
      
      if($request->has('shape')) 
      {
          $posts->whereIn('shape', $request->input('shape'));
      }
      
      ....
      
      $posts = $posts->get();
      

      请务必先验证您的条件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多