首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从具有多个数组条件的laravel表中检索数据?

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

Stack Overflow用户
提问于 2016-10-17 14:35:10
回答 2查看 660关注 0票数 1

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

这是我的过滤器代码:-

代码语言:javascript
复制
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的数据格式,这是在过滤器函数的数组中调用的:-对不起,我不能嵌入图片,因为Stackoverflow不允许我这样做。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-17 15:46:36

您可以使用类似于以下内容的函数:

代码语言:javascript
复制
function appendFilter($query, $array, $fieldName){
    return $query->where(function($query) use ($array, $fieldName) {
        $query->whereIn($fieldName, $array)->orWhereRaw(empty($array) ? "true" : "false");
    });
}

你可以这样使用它:

代码语言:javascript
复制
$productQuery = DB::table("products");
$productQuery = appendFilter($productQuery, $shapes, "shape");
$productQuery = appendFilter($productQuery, $otherFilters, "otherField");
$results = $productQuery->get();

这个函数所做的是将嵌套的where与一起添加到执行WhereIn的第一部分,但它也有orWhereRaw,它在数组为空的情况下追加原始的“真”值(否则为false),因此,如果筛选值为空,则不会影响选择中的值。

票数 0
EN

Stack Overflow用户

发布于 2016-10-17 15:35:24

好吧,您可以像普通的whereIn一样使用这些条件。

例如:

代码语言:javascript
复制
$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();

确保首先验证您的条件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40089197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档