safoorsafdar / filterable
Laravel Eloquent 可过滤搜索功能
v1.0.0a1
2017-05-05 14:39 UTC
Requires
- php: ~5.6|~7.0
- illuminate/support: ~5.1
Requires (Dev)
- phpunit/phpunit: ~4.0||~5.0
- squizlabs/php_codesniffer: ^2.3
This package is not auto-updated.
Last update: 2024-09-20 19:55:40 UTC
README
Filterable 是一个包,可以帮助根据各种条件过滤 Eloquent 模型,这些条件已随包一起提供。
安装
通过 Composer
$ composer require safoorsafdar/filterable
使用方法
模型
<?php namespace App\Models\Account; use SafoorSafdar\Filterable\Traits\FilterableTrait; use Illuminate\Database\Eloquent\Model; /** * Class Account * * @package App\Models\Account */ class Account extends Model { use FilterableTrait protected static $filters = [ "name" => \App\Models\Account\Filters\AccountNameFilter::class, ]; }
注意 $filterable
数组包含当前数据库中的表属性名称,以及将执行查询的过滤类。
过滤类
<?php namespace App\Models\Account\Filters; use Illuminate\Database\Eloquent\Builder; use SafoorSafdar\Filterable\Filter\Filter; class AccountNameFilter extends Filter { /** * Apply a given search value to the builder instance. * * @param Builder $builder * @param mixed $value * * @return Builder $builder */ public static function apply( Builder $builder, $value, $condition, $operator ) { $operatorDecorator = self::createOperatorDecorator($condition); if (self::isValidDecorator($operatorDecorator)) { return app($operatorDecorator)->resolve($builder, 'name', $value, $operator); } } }
控制器
<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; class AccountController extends Controller { public function index(){ $filters = $request->get('filter', []); return view('account.index') ->withFilterFields(\App\Models\Account\Account::filterableAttributes()) ->withFilterCondition(\Filterable::operators()) ->with("filtered", $filters); } }
视图
@include('Filterable::partial.filterable',['filtered'=>$filtered,'filter_fields'=>$filter_fields,'filter_condition'=>$filter_condition])
<script type="text/javascript" src="/js/filterable.js"></script>
将提交的过滤器应用到模型上
$query = Account::with(['user']); $filters = array_filter(array_get($request->all(), 'filter', [])); if ( ! empty($filters)) { $query->applyFilter($filters); } $result = $query->get();
变更日志
请参阅 CHANGELOG 获取有关最近更改的更多信息。
测试
$ composer test
贡献
请参阅 CONTRIBUTING 和 CONDUCT 了解详细信息。
安全性
如果您发现任何与安全性相关的问题,请通过电子邮件 safoor.safdar@gmail.com 而不是使用问题跟踪器。
致谢
许可
MIT 许可证 (MIT)。请参阅 许可文件 获取更多信息。