Php 如何从具有多个数组条件的laravel中的表中检索数据

Php 如何从具有多个数组条件的laravel中的表中检索数据,php,laravel,laravel-5,laravel-5.1,Php,Laravel,Laravel 5,Laravel 5.1,我正在电子商务网站上应用搜索过滤器。在这里,客户可以选择不同的领域,如颜色、形状、价格、对称性、抛光、清晰度和其他各种东西。 当客户选择任何选项时,应将其添加到他选择的最后一个选项中。因此,他/她可能具有必须提取和显示的条件组合。 对于一个数组条件,我可以在laravel中使用,但对于多个数组条件,我应该使用什么。我不确定哪个数组是空的 以下是我的过滤器代码:- public function Filter(Request $request) { $conditions = array(

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

以下是我的过滤器代码:-

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的数据格式,这是在过滤函数数组中调用的:-

好吧,您可以使用这些条件,就像常规
中的
一样

例如:

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

请确保首先验证您的条件。

好的,您可以像使用常规
一样使用这些条件,其中

例如:

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

请确保首先验证您的条件。

您可以使用类似以下功能:

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与执行where的第一部分一起追加,但也有或WhereRaw,在数组为空时追加原始的“true”值(否则为false)
因此,如果带有筛选值的数组为空,则不会影响select中的值

您可以使用与此类似的功能:

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与执行where的第一部分一起追加,但也有或WhereRaw,在数组为空时追加原始的“true”值(否则为false) 因此,如果带有筛选值的数组为空,则不会影响select中的值