mehdi-fathi/eloquent-filter

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次,因此我决定发布4.0版本,增加了2个新功能。

当前版本支持

  • 支持与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的provider中

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

3- 添加外观 'EloquentFilter' => eloquentFilter\Facade\EloquentFilter::class 到 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 数组
User::setWhiteListFilter(['name']); 

向白名单过滤器添加新字段

User::addWhiteListFilter('name'); 

-注意 万一的话,你必须在模型中设置 $whiteListFilter。此方法的目的在于防止恶意用户操纵查询字符串。

条件指南表

  • 为了更好地理解这一点,我提供了一个包含所有条件和示例的表格。它表示 Eloquent 过滤器如何检测参数以及每个参数将执行什么样的查询。

简单示例

你只需传递查询字符串形式的数据。例如

简单的 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

如果你要按类似条件进行查询,可以按照此示例操作。

/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 过滤器的相同代码。请检查代码部分。这不是很棒吗?
$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 过滤器默认不支持所有条件。在这种情况下,你可以创建一个重写方法。如果你要创建自己的查询过滤器,可以轻松实现。你应该注意在新版本中在使用方法名之前使用 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 过滤器使用的所有参数。你可以设置键来获取特定的索引。例如 EloquentFilter::filterRequests('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
        ];
    }

}
  • 查询参数中的每个都在 WhereRelationLikeCondition 中检测,默认由 Eloquent Filter 检测。

在上面的例子中,创建 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方法中设置集合数据,以创建自己的自定义条件而无需查询字符串。

-注意 因此,您必须取消perpage参数的设置。您只能设置page参数来分页,此参数将忽略过滤器。

  • 您可以通过以下代码忽略某些请求参数。
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有一个魔法方法,用于更改在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;
    }
}

如上代码所示,您可以在Eloquent Filter运行之前,在serializeRequestFilter方法中修改模型的每个查询参数。这是一个实用的方法,当您想设置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 是一个用于构建器/数据库检查是否使用了 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请求。我们欢迎各种贡献,包括错误修复、新功能和文档改进。

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

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

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

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

许可证

Eloquent Filter 是开源软件,受 MIT 许可证 许可。

联系方式

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

致谢

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