patienceman / filtan
Filtan 是一个强大的 Laravel QueryFilter 包,旨在简化并增强 Eloquent 查询的过滤过程。它允许开发人员轻松地将过滤器应用于查询,并根据动态参数自定义结果。通过将 Filtan 集成到您的 Laravel 项目中,您可以实现以下功能:
1.0.5
2024-02-08 00:00 UTC
README
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 ); } }
贡献
欢迎拉取请求。对于重大更改,请首先提交一个问题以讨论您想要进行的更改。
- 分叉存储库并创建一个新的分支以进行您的贡献。
- 进行更改或添加,遵守编码规范。
- 提交包含您的更改的拉取请求,我们的团队将及时审阅。