Eloquent Filter 可自动将自定义过滤器添加到您的 Laravel Eloquent 模型中。它易于使用且完全动态,只需发送查询字符串即可。

4.4.5 2024-09-04 11:09 UTC

This package is auto-updated.

Last update: 2024-09-09 13:22:53 UTC


README

alt text

Latest Stable Version Run tests License GitHub stars Monthly Downloads Scrutinizer Code Quality codecov

Eloquent Filter 是一个强大的 Laravel 扩展包,提供了一种直观的方式来使用查询字符串过滤 Eloquent 模型。它非常适合构建响应式 API 和复杂的数据集,并与 Laravel 的现有 Eloquent 模型无缝集成,通过最少的设置即可添加强大的动态过滤功能。

功能

  • 支持复杂的查询结构
  • 易于覆盖条件以实现自定义行为
  • 与 Laravel 和 Eloquent(包括查询构建器)和谐集成
  • 完全控制过滤执行和定制

我们已经将 Eloquent Filter 定制得尽可能灵活——无论您的查询是简单还是复杂。凭借其丰富的功能集,您可以轻松实现适用于应用程序的特定功能。

注意 我们考虑了您希望无论简单还是复杂都实现的可预测功能,尽管我们有很多功能可以用来实现您特定的其他功能。

目录

需求

  • PHP 8.0,8.1,8.2
  • Laravel 8.x,9.x,10.x,11.x(新)

版本信息

最近 Eloquent Filter 的安装量已超过 100,000 次,因此我决定发布带有 2 个新功能的 4.0 版本。

当前版本支持

  • 支持与 Eloquent 一起使用查询构建器
  • 为自定义方法设置特定名称

🎤 简介

如果你在一个端点中执行任务,并且有一些带有许多高级选项的查询,可能会遇到挑战。

比如说,我们想要制作一个具有多个过滤选项的高级搜索页面。

没有 Eloquent Filter 的简单实现

资源 URI 将看起来像这样

/users/index?age_more_than=25&gender=male&created_at=25-09-2019

控制器中的简单实现将像这样

<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
    public function index(Request $request)
    {
        $users = User::where('is_active', true);

        if ($request->has('age_more_than')) {
            $users->where('age', '>', $request->age_more_than);
        }

        if ($request->has('gender')) {
            $users->where('gender', $request->gender);
        }

        if ($request->has('created_at')) {
            $users->where('created_at','>=', $request->created_at);
        }

        return json_encode($users->get());
    }
}

这个解决方案简单且效果良好,但并不适用于企业项目。您需要为每个所需的过滤器添加条件。特别是如果您要执行更复杂的过滤,您的代码可能会迅速变得一团糟!💥

因此,Eloquent Filter 准备好了帮助您摆脱复杂性,同时节省时间。

使用 Eloquent Filter 的简单实现

Eloquent Filter 可以帮助您解决这个问题。只需设置查询字符串即可使用它。它会自动且系统化地生成您的查询,同时您也可以控制它们。

安装 Eloquent Filter 后,请求 URI 将如下所示

/users/list?age_more_than[operator]=>&age[value]=35&gender=male&created_at[operator]==>&created_at[value]=25-09-2019

在控制器中,您只需要这一行

/**
 * Class UsersController.
 */

namespace App\Http\Controllers;

use App\User;

class UsersController
{
    public function list()
    {
        return User::filter()->get();
    }
}

通过 Eloquent Filter 的实现,您可以使用所有文档中记录的过滤器!

🔌 安装

1- 在您的项目目录中运行以下命令,将 Eloquent Filter 添加为依赖项

    $ composer require mehdi-fathi/eloquent-filter
  • 注意 对于小于 5.8 的 Laravel 版本,您应安装版本 2.2.5

      $ composer require mehdi-fathi/eloquent-filter:2.2.5
    
  • 注意 我们支持自动发现,但您也可以检查它们。

2- 将 eloquentFilter\ServiceProvider::class 添加到 app.php 中的提供者

'providers' => [
  /*
   * Package Service Providers...
   */
    eloquentFilter\ServiceProvider::class
]

3- 添加外观 'EloquentFilter' => eloquentFilter\Facade\EloquentFilter::class 到 aliases app.php

'alias' => [
  /*
   * Facade alias...
   */
    'EloquentFilter' => eloquentFilter\Facade\EloquentFilter::class,
],

就这样,享受吧!💥

📖 基本用法

配置模型并设置白名单

Filterable 特性添加到您的模型中,并在白名单数组中设置您想要使用过滤器字段的名称。您也可以在模型中重写此方法。

use eloquentFilter\QueryFilter\ModelFilters\Filterable;

class User extends Model
{
    use Filterable;
    
    private static $whiteListFilter =[
        'id',
        'username',
        'email',
        'created_at',
        'updated_at',
    ];
}
  • 您可以将 * 字符设置为所有字段的过滤器,如下例所示
private static $whiteListFilter = ['*'];

您可以在方法中动态添加或设置 $whiteListFilter。例如

设置数组到 WhiteListFilter

  • 注意 此方法会覆盖 $whiteListFilter 数组
User::setWhiteListFilter(['name']); 

向 WhiteListFilter 添加新字段

User::addWhiteListFilter('name'); 

-注意 万一,您必须在模型中设置 $whiteListFilter。该方法的目标是防止恶意用户操作查询字符串。

条件指南表

  • 为了更好地理解这一点,我提供了一个所有条件和示例的表格。它表示 eloquent filter 如何检测参数以及每个参数会生成什么查询。

简单示例

您只需将数据作为查询字符串传递。例如

简单的 Where

/users/list?email=mehdifathi.developer@gmail.com

SELECT ... WHERE ... email = 'mehdifathi.developer@gmail.com'
/users/list?first_name=mehdi&last_name=fathi

SELECT ... WHERE ... first_name = 'mehdi' AND last_name = 'fathi'
  • 如果您发送的日期格式为 Y-m-d,我们将像 Laravel 的 WhereDate() 方法一样工作。
/users/list?created_at=2024-09-01

SELECT ... WHERE ... strftime('%Y-%m-%d', "created_at") = cast(2024-09-01 as text)

Where In

此示例会生成 whereIn 方法。

/users/list?username[]=ali&username[]=ali22&family=ahmadi

SELECT ... WHERE ... username in ('ali','ali22') AND family = 'ahmadi'

OrWhere

此示例会生成 orWhere() 方法。

/users/list?name=mehdi&username=fathi&or[username]=ali

SELECT ... WHERE ... name = 'mehdi' AND username = 'fathi' or username = 'ali'

Where like

如果您打算通过 like 条件进行查询。您可以通过此示例来完成。

/users/list?first_name[like]=%John%

SELECT ... WHERE ... first_name LIKE '%John%'

Where 通过操作符

您可以在查询字符串中设置任何 MySQL 操作符。

/users/list?count_posts[operator]=>&count_posts[value]=35

SELECT ... WHERE ... count_posts > 35
/users/list?username[operator]=!=&username[value]=ali

SELECT ... WHERE ... username != 'ali'
/users/list?count_posts[operator]=<&count_posts[value]=25

SELECT ... WHERE ... count_posts < 25

Where 嵌套关系模型

您可以通过查询字符串中的查询字符串数组设置所有嵌套关系。想象一下,用户模型与帖子有关联。帖子表与订单表有关联。

您可以通过在查询字符串中设置 posts[count_post]posts[orders][name] 来创建查询条件。

  • 请注意,您必须在 User 模型中设置 posts.count_postposts.orders.name
use eloquentFilter\QueryFilter\ModelFilters\Filterable;

class User extends Model
{
    use Filterable;
   
    private static $whiteListFilter =[
        'username',
        'posts.count_post',
        'posts.category',
        'posts.orders.name',
    ];

    /**
     * @return \Illuminate\Database\Eloquent\Relations\belongsTo
     */
    public function posts()
    {
        return $this->belongsTo('Models\Post');
    }

}
/users/list?posts[count_post]=876&username=mehdi

select * from "users" where exists 
         (select * from "posts" where "posts"."user_id" = "users"."id" 
         and "posts"."count_post" = 876)
         and "username" = "mehdi"
  • 上述示例是您使用的没有 eloquent filter 的相同代码。请检查代码。这不是很棒吗?
$builder = (new User())->with('posts');
        $builder->whereHas('posts', function ($q) {
            $q->where('count_post', 876);
        })->where('username','mehdi');

Where 数组嵌套关系模型

您可以通过传递数组来创建 whereIn 条件。

/users/list?posts[category][]=php&posts[category][]=laravel&posts[category][]=jquery&username=mehdi

select * from "users" where exists 
         (select * from "posts" where 
         "posts"."category" in ('php','laravel','jquery') )
         and "username" = "mehdi"

Doesnthave Where(新功能)

/tags/list?doesnt_have=category

select * from "tags" where not exists (select * from "categories" where "tags"."foo_id" = "categories"."id")'
  • 为了获取与模型没有任何关系的那些数据,就像 Doesnthave 方法一样工作。

特殊参数

您可以在查询字符串中设置特殊参数 limitorderBy 来根据该参数进行查询。

/users/list?f_params[limit]=1

SELECT ... WHERE ... order by `id` desc limit 1 offset 0
/users/list?f_params[orderBy][field]=id&f_params[orderBy][type]=ASC

SELECT ... WHERE ... order by `id` asc
/users/list?f_params[orderBy][field]=id,count_posts&f_params[orderBy][type]=ASC

SELECT ... WHERE ...  order by `id` asc, `count_posts` asc

Where between

如果您打算基于日期进行查询,您必须在查询字符串中填写 startend 键。因此,您可以将它作为查询字符串设置。这些参数用于按日期过滤。

/users/list?created_at[start]=2016/05/01&created_at[end]=2017/10/01

SELECT ... WHERE ... created_at BETWEEN '2016/05/01' AND '2017/10/01'

高级 Where

/users/list?count_posts[operator]=>&count_posts[value]=10&username[]=ali&username[]=mehdi&family=ahmadi&created_at[start]=2016/05/01&created_at[end]=2020/10/01
&f_params[orderBy][field]=id&f_params[orderBy][type]=ASC

select * from `users` where `count_posts` > 10 and `username` in ('ali', 'mehdi') and 
`family` = ahmadi and `created_at` between '2016/05/01' and '2020/10/01' order by 'id' asc limit 10 offset 0

因此,查询字符串的字段与您的模型中 $whiteListFilter 的数据库表字段相同或声明为重写方法。重写方法可以被视为自定义查询过滤器。

自定义查询过滤器

Eloquent Filter 默认不支持所有条件。在这种情况下,您可以创建一个重写方法。如果您打算创建自己的查询过滤器,可以轻松完成。您应该在方法名称前使用 filterCustom

您应该运行命令来创建特性并在模型上使用它

php artisan eloquentFilter:filter users
namespace App\ModelFilters;

use Illuminate\Database\Eloquent\Builder;

/**
 * Trait UsersFilter.
 */
trait UsersFilter
{
    /**
     * This is a sample custom query
     * @param \Illuminate\Database\Eloquent\Builder $builder
     * @param                                       $value
     *
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function filterCustomSample_like(Builder $builder, $value)
    {
        return $builder->where('username', 'like', '%'.$value.'%');
    }
}

-注意 这些查询字符串的字段与特性中的方法相同。在您的模型中使用特性

/users/list?sample_like=a

select * from `users` where `username` like %a% order by `id` desc limit 10 offset 0
use App\ModelFilters\UsersFilter;

class User extends Model
{
    use UsersFilter,Filterable;

    protected $table = 'users';
    protected $guarded = [];
    private static $whiteListFilter =[
        'id',
        'username',
        'email',
        'created_at',
        'updated_at',
    ];
    
}

一些过滤器方法

User::filter()->paginate();
  • EloquentFilter::filterRequests():获取 Eloquent Filter 使用的所有参数。您可以通过设置键来获取特定索引。例如 EloquentFilter::filterRequests('username') 获取 username 索引。

  • EloquentFilter::getAcceptedRequest():获取通过 AcceptRequest 方法设置的参数。

  • EloquentFilter::getIgnoredRequest() : 获取通过getIgnoreRequest方法设置的忽略参数。

自定义检测条件

有时您可能想要创建自定义条件来执行Eloquent Filter默认不支持的新查询。好消息是从现在开始,您可以在Eloquent Filter中创建自定义条件。

您可以在检查后生成新查询的条件。例如

我们必须有两个类。第一个类检测条件,第二个类生成查询。

  • 步骤1:创建一个用于检测一些条件的类
use eloquentFilter\QueryFilter\Detection\Contract\ConditionsContract;

/**``
 * Class WhereRelationLikeCondition.
 */
class WhereRelationLikeCondition implements ConditionsContract
{
    /**
     * @param $field
     * @param $params
     * @param $is_override_method
     *
     * @return string|null
     */
    public static function detect($field, $params, $is_override_method = false): ?string
    {
        if (!empty($params['value']) && !empty($params['limit']) && !empty($params['email'])) {
            $method = WhereRelationLikeConditionQuery::class;
        }

        return $method ?? null;
    }
}
  • 步骤2:紧接着,创建一个用于生成查询的类。在这个例子中,我们创建了一个WhereRelationLikeConditionQuery类。
use eloquentFilter\QueryFilter\Queries\BaseClause;
use Illuminate\Database\Eloquent\Builder;

/**
 * Class WhereRelationLikeConditionQuery.
 */
class WhereRelationLikeConditionQuery extends BaseClause
{
    /**
     * @param $query
     *
     * @return Builder
     */
    public function apply($query): Builder
    {
        return $query
            ->whereHas('posts', function ($q) {
                $q->where('comment', 'like', "%" . $this->values['like_relation_value'] . "%");
            })
            ->where("$this->filter", '<>', $this->values['value'])
            ->where('email', 'like', "%" . $this->values['email'] . "%")
            ->limit($this->values['limit']);
    }
}
  • 步骤3:您创建一个名为EloquentFilterCustomDetection的方法,用于在模型中返回条件检测数组。
use eloquentFilter\QueryFilter\ModelFilters\Filterable;

class User extends Model
{
    use Filterable;
   
    private static $whiteListFilter =[
        'username',
        'posts.count_post',
        'posts.category',
        'posts.orders.name',
    ];

    /**
     * @return \Illuminate\Database\Eloquent\Relations\belongsTo
     */
    public function posts()
    {
        return $this->belongsTo('Models\Post');
    }

    public function EloquentFilterCustomDetection(): array
    {
        return [
            WhereRelationLikeCondition::class
        ];
    }

}
  • 在首次检查默认Eloquent Filter检测之后,每个查询参数都会在WhereRelationLikeCondition中使用。

在上述例子中创建方法EloquentFilterCustomDetection并返回条件类数组。

/users/list?username[value]=mehdi&username[limit]=10&username[email]=mehdifathi&username[like_relation_value]=mehdi&count_posts=10

select * from "users"
 where exists (select * from "posts" where 
"users"."post_id" = "posts"."id" 
and "comment" like ?) and "username" <> ? and "email" like ? and "count_posts" = ? limit 10

只需运行代码User::filter();即可查看结果。

  • Model::setLoadInjectedDetection(false):您可以在运行时禁用自定义检测条件。

注意同样,您可以通过使用方法SetCustomDetection在运行时设置自定义检测。例如

$users = User::SetCustomDetection([WhereRelationLikeCondition::class])->filter();

注意您可以通过以下代码禁用EloquentFilterCustomDetection

 User::SetLoadDefaultDetection(false)->filter();

注意您可以设置多个检测条件。例如

class User extends Model
{
    use Filterable;
    public function EloquentFilterCustomDetection(): array
    {
        return [
            WhereRelationLikeCondition::class,
            WhereRelationLikeVersion2Condition::class,
            WhereRelationLikeVersion3Condition::class,
        ];
    }
}
  • EloquentFilter::getInjectedDetections()获取所有自定义注入检测。

注意每个自定义检测都会在默认的Eloquent Filter检测之前运行。

配置

您可以将配置文件发布以进一步自定义该包。

发布配置

php artisan vendor:publish --provider="eloquentFilter\ServiceProvider"

配置

  • 您可以在配置文件(eloquentFilter.php)中禁用/启用Eloquent Filter。

      'enabled' => env('EloquentFilter_ENABLED', true),
    
  • Eloquent Filter识别查询字符串中的每个参数。也许您有一个Eloquent Filter不希望识别的查询字符串。您可以使用ignoreRequest来实现这个目的。但我们有一个更干净的处理方法。您可以在配置文件中设置参数request_filter_key。因此,每个查询字符串都会通过request_filter_key参数来识别。

      'request_filter_key' => '', // filter
    

例如,如果您设置'request_filter_key' => 'filter',那么Eloquent Filter将识别filter查询字符串。

/users/list?filter[email]=mehdifathi.developer@gmail.com

  • 您可以在配置文件(eloquentFilter.php)中禁用/启用Eloquent Filter的所有自定义检测。

      'enabled_custom_detection' => env('EloquentFilter_Custom_Detection_ENABLED', true),
    
  • 您应该设置一个索引数组ignore_request以忽略所有过滤器。

      'ignore_request' => [] //[ 'show_query','new_trend' ],
    
  • 最好保持max_limit。它是一个限制,用于防止开发者或恶意用户意外或故意生成糟糕的查询。

      'max_limit' => 20
    
  • 通过filtering_keys,您有一个地方可以声明一些提供的键并在过滤中使用它们。

      'filtering_keys'=>[
        'title_sport_advanced' => [
            'title' => 'sport',
            'created_at' => [
                'start' => '2019-01-01 17:11:46',
                'end' => '2019-02-06 10:11:46',
            ],
            'sub_cat' => [
                'news 1', 'news 2'
            ],
        ]
      ]
    

    然后您只需要传递config('eloquentFilter.filtering_keys.title_sport_advanced')到过滤方法。

  • 从现在开始,我们有了通过日志记录实例记录日志的能力。由于查询是动态创建的,因此需要保留查询及其时间的功能。因此,我们在此版本中添加了它,并添加了一些其他选项以更好地管理。

      'log' => [
      'has_keeping_query' => false,
      'max_time_query' => null,
      'type' => 'eloquentFilter.query'
      ]
    

默认情况下是禁用的,您可以通过has_keeping_query启用它,type是日志类型,而max_time_query是用于保留执行时间较长的查询的值。

别名

有时您可能想在URL中更改一些参数,这些参数引用了模型的字段。例如,输入表单的名称与模型不相似,或者您可能出于其他原因想更改它们,那么别名作为一个新功能可能很有用。

    class Stat extends Model
    {
        use Filterable;
        /**
         * @var array
         */
        private static $whiteListFilter = [
            'type',
            'national_code',
        ];

        /**
         * @var array
         */
        private $aliasListFilter = [
            'national_code' => 'code',
        ];
    }

然后您应该通过在URL中发送code参数来查询模型的国籍代码字段。

查询构建器简介

好消息!

很多人向我请求增加新功能以支持Laravel查询构建器。这需要大量的精力和投入时间,所以我决定实现它。然而,尽管非常困难,现在它几乎完成了。

从现在开始,我们支持查询构建器和Eloquent。你不仅可以使用查询构建器,还可以同时使用Eloquent。

这是一个新功能,我现在正忙于代码中修复问题。无论如何,这个功能现在已经上线,但还有一些限制。目前我们不支持查询构建器的WhereCustomConditionWhereHas,但其他条件都可以使用。此外,我们没有任何类型的whitelistblacklistcustom detectionalias。目前,这只是一个简单的功能。

  • 它们的用法就像模型一样,你只需要使用过滤器作为方法。显然,不需要像使用特质等任何改变。
 DB::table('users')->filter();

魔术方法

魔法方法是一系列你可以用作Eloquent Filter包装的方法。例如,在过滤前序列化数据或更改响应中的数据等。现在Eloquent Filter有serializeRequestFilterResponseFilter等。

请求方法

调用ignoreRequest(静态作用域)或ignoreRequestFilter将忽略你不希望在Eloquent Filter条件中使用的一些请求。

按照以下示例更改Laravel项目的控制器代码:

          
  $users = User::ignoreRequest(['name'])
            ->filter()
            ->with('posts')
            ->orderByDesc('id')
            ->paginate(request()->get('perpage'),['*'],'page');
  $user = new User();
  $users = $user->ignoreRequestFilter(['name','family'])
            ->filter()
            ->with('posts')
            ->orderByDesc('id')
            ->paginate(request()->get('perpage'),['*'],'page');

-注意 Eloquent Filter默认使用查询字符串在Laravel中执行查询。尽管如此,你可以设置模型中的filter方法的数据集,以创建自己的自定义条件而无需查询字符串。

-注意 因此你必须取消你自己参数的设置,比如每页数。你只能设置分页的页参数,该参数将被过滤器忽略。

  • 你可以通过使用以下代码忽略一些请求参数。
User::ignoreRequest(['perpage'])
            ->filter()
            ->paginate(request()->get('perpage'), ['*'], 'page');

例如:perpage参数永远不会出现在Eloquent Filter的条件中。这与分页方法有关。page参数默认在Laravel的Eloquent Filter中被忽略。

  • 你可以将一些请求参数过滤为可接受的过滤。

调用AcceptRequest(静态作用域)或acceptRequestFilter将接受你想要在Eloquent Filter条件中使用的请求。例如:usernameid键将包含在Eloquent Filter的条件中。

``
User::AcceptRequest(['username','id'])
            ->filter()
            ->paginate(request()->get('perpage'), ['*'], 'page');
$user = new User();
$user->acceptRequestFilter(['username','id'])
            ->filter()
            ->paginate(request()->get('perpage'), ['*'], 'page');

请求过滤器

Eloquent Filter有一个用于在处理之前更改注入请求的魔法方法。这个方法是SerializeRequestFilter。你只需在模型中实现SerializeRequestFilter方法。例如:

class User extends Model
{
    use Filterable;
    
    private static $whiteListFilter =[
        'username'
    ];
    
    public function serializeRequestFilter($request)
    {
       $request['username'] = trim($request['username']);
       return $request;
    }
}

如上代码所示,你可以在serializeRequestFilter方法中修改模型的所有查询参数,在Eloquent Filter运行之前。这是一个实用的方法,当你想要设置user_id或转换日期或删除空格等。

请求字段类型转换过滤器

Eloquent Filter在过滤过程之前需要为每个字段提供一系列特定的方法。这个功能最近已经实现。通过在模型中使用filterSet + field方法,你将为特定字段添加一些更改。

class Category extends Model
{
    use Filterable;
    
    private static $whiteListFilter =[
        'desc'
    ];
    
    public function filterSetDesc($value)
    {
        return trim($value);
    }
}

响应过滤器

响应过滤器是在Eloquent Filter处理之后更改响应的覆盖方法。该方法称为getResponseFilter,你可以在模型中实现getResponseFilter方法。例如:

class User extends Model
{
    use Filterable;
    public function getResponseFilter($response)
    {
        $data['data'] = $response;
        return $data;
    }
}
  • 你可以在getResponseFilter方法中传递一个回调函数以更改响应。我们只在查询构建器的数据库中有这个功能。
$categories = DB::table('categories')->filter()->getResponseFilter(function ($out) {

    $data['data'] = $out;

    return $data;
});

黑名单检测

显然,你不希望所有能够通过操作请求来获取数据用户。因此,我们最好有一个Eloquent控制功能。尽管我们在请求端有这个能力,但我们还需要在Eloquent端有这个功能。

我们将设置一个黑名单检测来防止使用它来创建条件。因此,该列表在创建条件时已被禁用。例如:

namespace App\Http\Controllers;

/**
 * Class UsersController.
 */
class UsersController
{

    public function list()
    {
              $users = User::setBlackListDetection(
                  [
                      'WhereCondition',
                  ]
                )->filter()
                ->orderByDesc('id')
                ->paginate();
    }
}
  • 你可以在模型层设置。使用black_list_detections数组来完成这个目的。
<?php

namespace Tests\Models;

use eloquentFilter\QueryFilter\ModelFilters\Filterable;
use Illuminate\Database\Eloquent\Model;

class Car extends Model
{
    use Filterable;
    
    private static $whiteListFilter = '*';

    protected $black_list_detections = [
        'WhereCondition',
    ];
}

宏方法

-isUsedEloquentFilter是一个用于构建器/DB的宏方法,用于检查查询是否使用了eloquent-filter。

《getDetectionsInjected》是一个宏方法,用于获取注入对象列表数组。

例如:

    $users = User::SetCustomDetection([WhereRelationLikeCondition::class])->filter();
    echo $users->isUsedEloquentFilter(); // will true
    echo $users->getDetectionsInjected(); // will showing a list array of injected objects
    $categories = DB::table('categories')->filter();
    echo $categories->isUsedEloquentFilter(); // will true
    

贡献

如果您想为Eloquent Filter做出贡献,请fork仓库并创建一个pull request。我们欢迎所有类型的贡献,包括错误修复、新功能和文档改进。

提议的功能(正在考虑中)

我们一直在努力改进我们的包,并为即将发布的版本计划了以下功能:

  • 可配置的过滤器预设:实现定义和保存过滤器预设的功能。此功能将允许用户快速应用常见的过滤器集合,而无需每次都指定它们。

您的贡献始终受到欢迎!如果您想帮助开发这些功能。

许可证

Eloquent Filter是开源软件,许可协议为MIT许可证

联系

如果您对Eloquent Filter有任何疑问或反馈,请随时通过mehdifathi.developer@gmail.com联系我们。我们非常愿意听到您的声音!

致谢

我们想感谢Laravel社区对该项目的支持和贡献。