PHPackages                             zgldh/laravel-query-filter - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Search &amp; Filtering](/categories/search)
4. /
5. zgldh/laravel-query-filter

ActiveLibrary[Search &amp; Filtering](/categories/search)

zgldh/laravel-query-filter
==========================

An easier way to filter Eloquent and Models. Save you from Request::input and Where hell.

6131PHP

Since Feb 28Pushed 10y ago2 watchersCompare

[ Source](https://github.com/zgldh/laravel-query-filter)[ Packagist](https://packagist.org/packages/zgldh/laravel-query-filter)[ RSS](/packages/zgldh-laravel-query-filter/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

laravel-query-filter
====================

[](#laravel-query-filter)

An easier way to filter Eloquent and Models. Save you from Request::input and Where hell.

再也不用写一长串where语句了，再也不用查询语句贴来贴去了。

用法：
---

[](#用法)

```
    use zgldh\LaravelQueryFilter\AbstractFilter;

    //首先要定义一个过滤器， 继承自 AbstractFilter
    class UserFilter extends AbstractFilter
    {
        //该函数必须被重写， 用于定义哪些字段需要被过滤
        public function columns()
        {
            $columns = [
                // 参数名为 name， 数据库字段名为 username, 过滤规则为 “LIKE” (前后百分号)
                Column::build('name', 'username', Column::LIKE),
                // 参数名为 age, 数据库字段名为 age， 过滤规则为 “等于”
                Column::build('age'),
                // 参数名为 email, 数据库字段名为 email (其实无所谓), 过滤规则为回调函数 emailCallback()
                Column::build('email', null, [$this, 'emailCallback']),
                // 参数名为 created_at, 数据库字段名为 created_at, 过滤规则为 "Between"
                Column::build('created_at', null, Column::BETWEEN),
                // 参数名为 status, 数据库字段名为 status, 规则为 “等于”，默认值为 'activate'
                Column::build('status', null, Column::EQUAL)
                    ->setDefaultValue('activate')
            ];
            return $columns;
        }

        /**
         * @param $builder          Eloquent Builder
         * @param Column $column    上面定义的这一列规则
         * @param $value            过滤的参数值
         * @return mixed            要返回一个Eloquent Builder
         */
        public function emailCallback($builder, Column $column, $value)
        {
            //这里就跟平常写where一样。
            return $builder->where('email', 'LIKE', $value.'%');
        }
    }

    //实例化过滤器
    $filter = new UserFilter();

    //应用过滤器，得到最终结果
    $users = $filter->filter(new User(), \Request::all())->get();

    //在上文例子中， \Request::all() 的形式通常应该为
    [
        'name'=>'zgldh',
        'age'=>20
        'email'=>'zg',
        'created_at'=>[
            'start'=>'2012-12-12',
            'end'=>'2012-12-13',
        ],
        'status'=>null
    ]
```

安装
--

[](#安装)

`composer require laravel-query-filter`

过滤规则
----

[](#过滤规则)

### LIKE

[](#like)

会生成 `$builder->where('key', 'like', '%'.$value.'%')` 的查询。

### EQUAL

[](#equal)

会生成 `$builder->where('key', $value)` 的查询。

### NOT\_EQUAL

[](#not_equal)

会生成 `$builder->where('key', '', $value)` 的查询。

### GREATER\_THAN

[](#greater_than)

会生成 `$builder->where('key', '>', $value)` 的查询。

### LESS\_THAN

[](#less_than)

会生成 `$builder->where('key', '=', $value['start'])
            ->where('key', '
