eth0/laravel-filters

一个简洁的laravel模型过滤器,我们可以通过传递查询字符串来过滤laravel模型。

v1.1.0 2021-07-12 23:06 UTC

This package is auto-updated.

Last update: 2024-09-13 06:05:37 UTC


README

通过查询字符串清理地过滤laravel模型的方法。

GitHub issues GitHub forks GitHub stars GitHub license Twitter

安装

您可以通过以下命令使用composer安装此包:

composer require eth0/laravel-filters

该包将自动注册自己,但如果您的laravel版本小于5.5,您需要在您的config/app.php文件中添加 Mukja\LaravelFilters\LaravelFiltersServiceProvider::class,服务提供者。

文档

一旦安装了该包,将会有2个新的artisan命令。

  • php artisan make:filter
  • php artisan make:model:filter

然后我们只需输入php artisan make:filter ModelFilter即可生成新的模型过滤器,这将生成一个位于app/Filters/目录下的名为ModelFilter.php的新PHP文件,如下所示。

<?php

namespace App\Filters\ModelFilter;

use Mukja\LaravelFilters\FiltersAbstract;

class ModelFilter extends FiltersAbstract
{
    protected $filters = [
        //
    ];
}

$filters变量中,我们可以注册所有我们的模型过滤器。

<?php

namespace App\Filters\ModelFilter;

use Mukja\LaravelFilters\FiltersAbstract;
use App\Filters\Model\{
    ModelStatusFilter,
    ModelCreatedAtFilter
};

class ModelFilter extends FiltersAbstract
{
    protected $filters = [
        'status' => ModelStatusFilter::class,
        'created_at' => ModelCreatedAtFilter::class
    ];
}

然而,我们还没有创建模型过滤器,所以让我们现在创建模型过滤器。

注意:技巧:如果您在文件名前添加一个前缀,如下所示Model,将在您的Filters文件夹中生成一个新的Model文件夹,这样您就可以保持过滤器整洁。

php artisan make:model:filter Model\ModelStatusFilter Model\ModelCreatedAtFilter

以下是生成的文件之一

<?php

namespace App\Filters\Model;

use Mukja\LaravelFilters\FilterAbstract;
use Illuminate\Database\Eloquent\Builder;

class ModelStatusFilter extends FilterAbstract
{
    /**
     * Define column mappings.
     * @return array
     */
    public function mappings ()
    {
        return [];
    }

    /**
     * Filter the column.
     * @param  Builder $builder
     * @param  mixed  $value
     * @return Builder $builder
     */
    public function filter (Builder $builder, $value)
    {
        //
    }
}

在 mappings 方法中,我们可以返回一个映射数组,例如,如果我们想将一些单词转换为匹配我们的数据库列,例如

public function mappings ()
{
    return [
        'status' => 'active',
        's' => 'active'
    ];
}

接下来,在filter方法中,我们可以构建我们的查询过滤器,如下所示

/**
 * Filter the column.
 * @param  Builder $builder
 * @param  mixed  $value
 * @return Builder $builder
 */
public function filter (Builder $builder, $value)
{
    return $builder->where('status', $value);
}

一旦我们准备好了一切,最后一步是将一个范围添加到我们的laravel模型中,该过滤器将被使用。

public function scopeFilter (Builder $builder, $request, array $filters = [])
{
    return (new ModelFilter($request))->filter($builder);
}

然后我们可以在应用程序的任何地方使用我们的模型过滤器,只需添加过滤器范围即可

$model = Model::filter($request);

现在我们已经设置了过滤器,这意味着我们现在可以向服务器发送查询字符串https:://example.com?status=active,这将返回所有状态为active的记录。

路线图

以下是即将到来的计划的概述

  • 添加测试。

变更日志

请参阅CHANGELOG以获取有关最近更改的更多信息。

贡献

请随时提出任何拉取请求,以使此包变得更好。

安全

如果您发现任何与安全相关的问题,请通过电子邮件e.mukja@icloud.com联系,而不是使用问题跟踪器。

鸣谢

许可

MIT许可(MIT)。有关更多信息,请参阅许可文件