PHPackages                             huangbule/laravel-eloquent-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. [Database &amp; ORM](/categories/database)
4. /
5. huangbule/laravel-eloquent-filter

ActiveLibrary[Database &amp; ORM](/categories/database)

huangbule/laravel-eloquent-filter
=================================

An easy way to filter Eloquent Models

v1.1.2(1y ago)940MITPHPPHP ^7.4|^8.0

Since Mar 14Pushed 1y ago2 watchersCompare

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

READMEChangelog (9)DependenciesVersions (10)Used By (0)

 laravel-eloquent-filter
=========================

[](#-laravel-eloquent-filter-)

 An easy way to filter Eloquent Models.

依赖
--

[](#依赖)

1. PHP7.4+
2. laravel 8

安装
--

[](#安装)

```
$ composer require huangbule/laravel-eloquent-filter
```

发布配置文件：

```
php artisan vendor:publish --tag=filter
```

设计初衷
----

[](#设计初衷)

为了简化搜索写一大推`重复代码`,看下平时大家会写的简化代码，安全方面暂时先不考虑

```
$input = \request()->input(); //模拟接受用户数据
OrdersModel::query()->when(!empty($input['title']), function ($q) use($input) {
    //订单标题，模糊搜索，我想你们不止订单要给表有`title`字段吧，每个model你们都写一遍
    $q->where('title', 'like', '%' . $input['title'] . '%');
})->when(!empty($input['status']), function ($q) use($input) {
    //模拟in类型，订单状态，如果搜索多个状态你们可能会这么写，可能传数组或者逗号隔开
    if (!is_array($input['status'])) {
        $input['status'] = explode(",", $input['status']);
    }
    $q->whereIn('status', $input['status']);
})->when(!empty($input['created_at']), function ($q) use($input) {
    //搜索订单创建时间，可能传数组或者逗号隔开
    if (is_array($input['created_at'])) {
        $start_at = $input['created_at'][0];
        $end_at = date('Y-m-d', strtotime('+1 day', strtotime($input['created_at'][1])));
    } else {
        $start_at = $input['created_at'];
        $end_at = date('Y-m-d', strtotime('+1 day', strtotime($input['created_at'])));
    }
    return $q->where('created_at', '>=', $start_at)->where('created_at', '
