patienceman/filtan

Filtan 是一个强大的 Laravel QueryFilter 包,旨在简化并增强 Eloquent 查询的过滤过程。它允许开发人员轻松地将过滤器应用于查询,并根据动态参数自定义结果。通过将 Filtan 集成到您的 Laravel 项目中,您可以实现以下功能:

1.0.5 2024-02-08 00:00 UTC

This package is auto-updated.

Last update: 2024-09-08 14:09:34 UTC


README

ray-so-export (1)

Filtan 是一个简化并改进 Eloquent 查询过滤过程的 Laravel QueryFilter 包。它允许开发人员轻松地将过滤器应用于查询,并根据动态参数自定义结果。通过将 Filtan 集成到您的 Laravel 项目中,您可以轻松创建复杂且灵活的模型过滤机制。

安装

要安装此包,只需在 Laravel 终端粘贴命令即可。

composer require patienceman/filtan

使用方法

我们都喜欢自动化任务,比如 artisan 命令。Filtan 允许使用单个命令创建过滤器文件,从而无需手动创建。

php artisan make:cake BananaCake 

而不是创建传统过滤器的文件,我可以用一个命令为您创建。让我们以 Airplane 模型为例来创建一个新的过滤器。

php artisan make:filter AirPlaneFilter

它将为您创建过滤器文件,只需

App\Services\Filters 
namespace App\Services\Filters;

use Patienceman\Filtan\QueryFilter;

class AirPlaneFilter extends QueryFilter {
    /**
     * public function query($query) {
     *     $this->builder->where('name', 'LIKE', '%' .  . '%')
     * }
     */
}

您可以为您的过滤器指定一个自定义路径。只需在过滤器名称前添加即可。让我们回顾我们的例子。

php artisan make:filter Model/AirPlaneFilter

在您的 App/Services/Filters 目录中,您打算把所有的模型过滤器文件放在哪里?

namespace App\Services\Filters;

use Patienceman\Filtan\QueryFilter;

class AirplaneFilter extends QueryFilter {

    public function query(string $query){
        $this->builder->where('name', 'LIKE', '%' . $query . '%');
    }

}

所以现在您有一个过滤器函数,可以在调用新的 AirplaneModel 查询时应用!

我们需要与模型通信,告诉它们我们有过滤器,这样我们就可以随时调用它!所以让我们使用一个可过滤的特质来启用过滤器构建器。

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Patienceman\Filtan\Filterable;

class Airplane extends Model {
    use HasFactory, Filterable;
}

从现在开始,我们可以在需要 Airplane 模型的任何地方随时调用我们的过滤器,让我们看看我们如何在控制器中使用它。

namespace App\Http\Controllers\ApiControllers;

use App\Http\Controllers\Controller;
use App\Models\User;
use App\Services\Filters\CompanyFilter;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;

class AirplaneController extends Controller {
    /**
     * Display a listing of the resource.
     *
     * @return JsonResponse
     */
    public function index(CompanyFilter $filter): JsonResponse {
        $planes = Airplane::allPlanes()->filter($filter)->get();

        return successResponse(
            AirplaneResource::collection($planes),
            AirplaneAlert::DISPLAY_MESSAGE
        );
    }
}

贡献

欢迎拉取请求。对于重大更改,请首先提交一个问题以讨论您想要进行的更改。

  1. 分叉存储库并创建一个新的分支以进行您的贡献。
  2. 进行更改或添加,遵守编码规范。
  3. 提交包含您的更改的拉取请求,我们的团队将及时审阅。

许可证

MIT