skyraptor / modelsearch
0.4.1
2019-06-11 13:20 UTC
Requires
- illuminate/database: 5.7.*||5.8.*
- illuminate/http: 5.7.*||5.8.*
- illuminate/support: 5.7.*||5.8.*
Requires (Dev)
- orchestra/testbench: ~3.7
- phpunit/phpunit: ~7.0||~8.0
This package is auto-updated.
Last update: 2024-09-10 20:43:18 UTC
README
Laravel ModelSearch 是一个轻量级、易于使用的包,用于在 Laravel 或 Illuminate 5.8 中为特定模型创建动态搜索查询。
要求
- Laravel 5.7+
安装
Composer
只需运行 composer require skyraptor/modelsearch
来安装最新版本的包,之后运行 composer update
。该包将使用 Laravel 的包发现机制注册自己的 ServiceProvider。
配置
此包包含自己的配置文件,您应该通过运行命令 php artisan vendor:publish
并遵循屏幕上的说明来发布它。在配置文件中,您需要调整过滤目录的命名空间以及您的请求过滤前缀。
return [ 'filtersFQCN' => 'App\\Filters\\', 'requestFilterPrefix' => 'filter_' ];
过滤
为了定义一个过滤条件,您必须在过滤目录中创建一个与您的模型同名的文件夹。在这个文件夹内,您可以创建针对该模型特定的过滤条件。例如
path\to\laravel\app\Filters\User\HasId.php
您的过滤条件必须扩展 ModelSearch\Contracts\Filter。
<?php namespace App\Filters\User; use ModelSearch\Contracts\Filter; use Illuminate\Database\Eloquent\Builder; class HasId implements Filter { /** * Apply a given search value to the builder instance. * * @param Builder $builder * @param integer $value * @return Builder $builder */ public static function apply(Builder $builder, $value) { return $builder->where( 'id', $value ); } }
请求过滤
配置中的请求过滤前缀定义了用于请求参数中过滤名称的前缀。这可以用于允许用户通过 POST 和 GET 请求应用过滤条件。这必须通过调用 addRequestFilters
方法并提供一个请求实例来手动完成。
请始终记住按照适当的顺序应用过滤条件。
$search = new ModelSearch( User::class ); $search->addRequestFilters( $request ); $result = $search->result();
您可以通过调用 setRequestFilterPrefix()
方法并提供一个新前缀来更改搜索后的过滤前缀。
示例
以下示例展示了如何在控制器中使用搜索:
namespace ModelSearch\ModelSearch; public function someController( Request $request ) { ... $search = new ModelSearch( User::class ); $search->addFilters([ 'HasId' => 1, 'HasLastName' => 'Doe' ]); $search->addFilter('SomeFilter', 'value'); $result = $search->result(); // The search can be extended after processing results $search->addFilter('AnotherFilter', 'value'); $result2 = $search->result(); ... }