dingquochan / laravel-query-filters
Laravel中的查询过滤器
0.2.0
2021-12-14 02:52 UTC
Requires
- php: ^7.4|^8.0
- illuminate/console: ^6.20|^7.30|^8.75
- illuminate/database: ^6.20|^7.30|^8.75
- illuminate/http: ^6.20|^7.30|^8.75
- illuminate/support: ^6.20|^7.30|^8.75
Requires (Dev)
- orchestra/testbench: ^4.0
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2024-09-14 08:28:00 UTC
README
Laravel查询过滤器,用于Laravel。
要求
- PHP >= 7.4, >= 8.0
- Laravel >= 6.0
安装
您可以通过composer安装此包
composer require dinhquochan/laravel-query-filters
如果您不使用自动发现,请将ServiceProvider添加到config/app.php中的providers数组中
\DinhQuocHan\QueryFilters\QueryFilterServiceProvider::class,
基本用法
创建基本过滤器 app/Filters/PostFilter.php
<?php namespace App\Http\Filters; use DinhQuocHan\QueryFilters\QueryFilter; class PostFilter extends QueryFilter { /** * Filter by user id. * * @param int $id * @return void */ public function userId($id) { $this->getQuery()->where('user_id', $id); } }
在App\Http\Controllers\PostController
<?php namespace App\Http\Controllers; use App\Post; use App\Http\Filters\PostFilter; class PostController extends Controller { /** * Display a listing of the resource. * * @param \App\Http\Filters\PostFilter $filter * @return \Illuminate\Http\Response */ public function index(PostFilter $filter) { $posts = $filter->of(Post::class)->get(); // or $filter->of(Post::query())->get(); // or $filter->of(new Post())->get(); // Send it to view. return view('posts.index', compact('posts')); } }
创建新的过滤器
该包包含一个Artisan命令用于创建新的过滤器。
php artisan make:filter PostFilter
此过滤器将具有App\Http\Filters
命名空间,并保存在app/Http/Filters
中。
或者到自定义命名空间,例如App\Blog
php artisan make:filter "Blog/PostFilter"
此过滤器将具有App\Blog
命名空间,并保存在app/Blog
中。
可用的特性
可排序
允许排序项目,您必须添加$sortable
属性,默认情况下如果不调用sort
和sort_by
在请求中,特性将为查询添加默认排序列
<?php namespace App\Http\Filters; use DinhQuocHan\QueryFilters\SortableQueryFilter; use DinhQuocHan\QueryFilters\QueryFilter; class PostFilter extends QueryFilter { use SortableQueryFilter; /** * Sort direction. * * @var string */ protected $sortDirection = 'desc'; /** * Default sort by column. * * @var string */ protected $sortBy = 'created_at'; /** * Sortable columns. * * @var array */ protected $sortable = [ 'created_at', ]; }
示例
> your-url?sort_by=id
> SELECT * FROM `posts` ORDER BY `id` ASC
> your-url?sort_by=id&sort=desc
> SELECT * FROM `posts` ORDER BY `id` DESC
可搜索
允许搜索项目,您必须添加$searchable
属性
<?php namespace App\Http\Filters; use DinhQuocHan\QueryFilters\SearchableQueryFilter; use DinhQuocHan\QueryFilters\QueryFilter; class PostFilter extends QueryFilter { use SearchableQueryFilter; /** * Searchable columns. * * @var array */ protected $searchable = [ 'id', 'title', ]; }
示例
> your-url?search=foo or your-url?q=foo
> SELECT * FROM `posts` WHERE (`id` LIKE '%foo%' OR `title` LIKE '%foo%')
> your-url?search=foo*
> SELECT * FROM `posts` WHERE (`id` LIKE 'foo%' OR `title` LIKE 'foo%')
> your-url?search=*foo
> SELECT * FROM `posts` WHERE (`id` LIKE '%foo' OR `title` LIKE '%foo')
// your-url?search=foo&search_by=title
// SELECT * FROM `posts` WHERE `title` LIKE '%foo%'
测试
composer test
更新日志
有关最近更改的更多信息,请参阅更新日志。
贡献
请参阅贡献指南以获取详细信息。
安全
如果您发现任何与安全相关的问题,请通过contact@dinhquochan.com发送电子邮件,而不是使用问题跟踪器。
致谢
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件。