laravel - 如何在 Laravel 5 中过滤数据?

标签 laravel laravel-5

查看

...
<span class="opensans size13"><b>Gender</b></span>
                <select class="form-control" name="gender" id="gender" placeholder="Gender">
                  <option value="" selected="">Gender</option>                      
                  <option value="M">Male</option>
                  <option value="F">Female</option>                       
                </select>   
            <span class="opensans size8" style="color: red;"></span>                                                    
            <div class="clearfix pbottom15"></div>

            <span class="opensans size13"><b>Published</b></span>
                <select class="form-control" name="published" id="published" placeholder="Published">
                  <option value="" selected="">Published</option>                       
                  <option value="YES">YES</option>
                  <option value="NO">NO</option>                          
                </select>   
            <span class="opensans size8" style="color: red;"></span>    
...

<div class="col-md-5">
                <div class="right wh70percent">
                    <select class="form-control" name="status_sort" id="status_sort" placeholder="Status">
                      <option value="" selected="">Status</option>                      
                      <option value="N">N</option>
                      <option value="BL">BL</option>                          
                    </select>
                </div>
            </div>
...     

服务

public function dataCustomerList($param) 
    {
        $status = $param['status_sort'];
        $gender = $param['gender'];
        $published = $param['published'];

        if($published=='NO'){
            $published_check = 'NO';
            $published = 0;
        }
        else if($published=='YES'){
            $published_check = 'YES';
            $published = 1;
        }

        if(empty($status)) 
            $customer = customer::paginate(10);
        else
            $customer = customer::where('tb_customer.customer_status', '=', $status)
                                ->paginate(10);

        if(!empty($gender) AND !empty($published_check)){
            $customer = customer::where('tb_customer.gender', '=', $gender)
                                ->where('tb_customer.published', '=', $published)
                                ->paginate(10);
        }
        else if(!empty($gender)){
            $customer = customer::where('tb_customer.gender', '=', $gender)
                                ->paginate(10);
        }
        else if(!empty($published_check)){
            $customer = customer::where('tb_customer.published', '=', $published)
                                ->paginate(10);
        }
        return $customer;  
    }   

界面是这样的:/image/Wxy48.jpg

当我选择发布和性别,然后按搜索按钮时,数据将根据显示

当我只选择状态时,显示的数据按照

但是当我选择性别、发布和状态时,显示的数据不匹配

我想再问一下。除了我的代码之外,是否还有其他更简单的代码?

谢谢

最佳答案

您应该在每次添加过滤器时构建查询,例如:

    $customer = customer;

    if(!empty($status)) {
        $customer = $customer->where('tb_customer.customer_status', '=', $status);
    }

    if (!empty($gender)) {
        $customer = $customer->where('tb_customer.gender', '=', $gender);
    }

    if (!empty($published_check)) {
        $customer = $customer->where('tb_customer.published', '=', $published);
    }

    return $customer->paginate(10);

通过这种方式,您只需添加条件,无需检查每个案例并再次编写相同的查询

免责声明:我不是 Laravel 用户,您可能需要稍微编辑代码,只是说明构建查询的方式

关于laravel - 如何在 Laravel 5 中过滤数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34574278/

相关文章:

php - 将 Laravel 5.1 升级到 5.2 时出现 fatal error

javascript - jQuery 从输入文本中获取错误数据

php - Laravel 错误 Symfony\Component\HttpKernel\Exception\NotFoundHttpException

laravel-5 - 如何使Laravel 5返回404状态代码

Laravel 命令和作业

php - 使用 Laravel 5 [phpunit] 测试方法和 Controller

php - 在 Laravel 自定义中间件中动态重新定义 url ('/' ) 值

php - 如何将上传文件存储在 laravel 8 的公用文件夹中

mysql - Laravel 在 whereHas 中使用 select

php - 如何在 Laravel 中制作带有产品属性的智能过滤器