aginev / search-filters
轻松在 Laravel 5+ 查询中应用搜索条件
1.0.1
2021-02-09 11:43 UTC
Requires
- php: ^7.2|^8.0
- laravel/framework: ^7.0|^8.0
This package is auto-updated.
Last update: 2024-08-30 01:17:34 UTC
README
此包将尝试解决筛选结果集的问题,并为您应用所有必要的检查。
特性
- Composer 可安装
- PSR4 自动加载
- 在 Laravel 5+ 中过滤查询
要求
仅用于 Laravel 的构建!
安装
在终端中
composer require aginev/search-filters:2.0.*
发布配置
php artisan vendor:publish --provider="Aginev\SearchFilters\SearchFiltersServiceProvider" --tag="config"
用法
将 Filterable 特性添加到您的模型中,例如:
use Aginev\SearchFilters\Filterable;
实现 setFilters 方法并定义您的过滤器。所有过滤器方法都接受数据库列名作为参数。
/** * Set query filters * * Overwrite this method in the model to set query filters */ public function setFilters() { $this->filter->equal('id', function ($by, $dir, $query) { // Every filter can recieve as last paramenter a closure that can be used for custom query order if required $query->orderBy($by, $dir); }) ->like('email') ->like('first_name') ->like('middle_name') ->like('last_name') ->like('phone') ->equal('is_active') ->date('created_at') ->date('updated_at'); }
需要自定义过滤器吗?
public function setFilters() { $this->filter->equal('id') ->custom('full_name', function ($query, $key, $value) { $query->where(\DB::raw("CONCAT_WS(' ', first_name, middle_name, last_name)"), 'LIKE', '%' . $value . '%'); }, function ($by, $dir, $query) { // Define custom order or skip this parameter in method call $query->orderBy($by, $dir); }); }
请注意,您需要将输入的过滤器传递给过滤器范围。我的 URL 通常如下所示 http://ex.com/?f[first_name]=Atanas&f[last_name]=GinevRetrieve 然后,您可以这样获取结果
// Simple filter query $users = User::filter(\Request::input('f', []))->get(); // Add additional where and pagination $users = User::where('is_admin', '=', 1) ->filter(\Request::input('f', [])) ->paginate(25);
可用的过滤器方法
public function setFilters() { $this->filter ->custom('column', function($query, $column, $value) { // $query - instance of Illuminate\Database\Eloquent\Builder // $column - the string passed as first argument // $value - the filter value if exists and not empty }, function ($by, $dir, $query) { // Not required and can be applied to any other filter method // $by - order by field // $dir - order direction // $query - instance of Illuminate\Database\Eloquent\Builder }) ->equal('column') // column = filter_value ->distinct('column') // column <> filter_value ->greaterThan('column') // column > filter_value ->greaterOrEqualThan('column') // column >= filter_value ->lessThan('column') // column < filter_value ->lessOrEqualThan('column') // column <= filter_value ->like('column') // column LIKE '%filter_value%' ->llike('column') // column LIKE '%filter_value' ->rlike('column') // column LIKE 'filter_value%' ->between('column') // column BETWEEN filter_value[0] AND filter_value[1] ->notBetween('column') // column NOT BETWEEN filter_value[0] AND filter_value[1] ->in('column') // column IN (filter_value[0], ..., filter_value[N]) ->notIn('column') // column NOT IN (filter_value[0], ..., filter_value[N]) ->null('column') // column IS NULL ->notNull('column') // column IS NOT NULL ->date('column') // column DATE(column) = filter_value ->dateBetween('column'); // column DATE(column) BETWEEN filter_value[0] AND filter_value[1] }
贡献
想要分享您自定义的过滤器方法吗?提交一个 pull request,我会考虑它们 :)
许可证
MIT - https://open-source.org.cn/licenses/MIT
关于
需要自由职业的网页开发者?请在我的网站上联系我 https://aginev.com