ngekoding / codeigniter-api-query-parser
基于CodeIgniter的REST-API查询解析器
v1.0.2
2023-06-13 14:12 UTC
Requires
- php: >=5.6
- greenlion/php-sql-parser: ^4.5
This package is auto-updated.
Last update: 2024-09-13 16:54:13 UTC
README
基于CodeIgniter框架的简单请求查询参数解析器。适用于CodeIgniter 3和CodeIgniter 4。
要求
- PHP 5.6或更高版本
- CodeIgniter 3或CodeIgniter 4
- PHPSQLParser ^4.5
安装
只需使用composer,一切都会完成。
composer require ngekoding/codeigniter-api-query-parser
用法
以下是CodeIgniter 3和CodeIgniter 4的示例。实际上,使用库的方式没有不同,只是创建查询构建器的不同。
CodeIgniter 3 示例
// CodeIgniter 3 Example // Get a query builder // Please note: we don't need to call ->get() here $queryBuilder = $this->db->select('p.*, c.name category') ->from('posts p') ->join('categories c', 'c.id=p.category_id'); /** * The first parameter is the query builder instance * and the second is the codeigniter version (3 or 4) */ $queryParser = new \Ngekoding\CodeIgniterApiQueryParser\QueryParser($queryBuilder); $result = $queryParser->applyParams(); // done print_r($result);
上述示例将输出一个包含 data 和 pagination 的数组
Array
(
[data] => Array
(
[0] => ...
[1] => ...
)
[pagination] => Array
(
[current_page] => int
[per_page] => int
[from] => int
[to] => int
[total] => int
[last_page] => int
[links] => Array
(
[first] => string
[prev] => string or null
[next] => string or null
[last] => string
)
)
)
CodeIgniter 4 示例
区别仅在于创建查询构建器的方式。
// CodeIgniter 4 Example $db = db_connect(); $queryBuilder = $db->from('posts p') ->select('p.*, c.name category') ->join('categories c', 'c.id=p.category_id'); $queryParser = new \Ngekoding\CodeIgniterApiQueryParser\QueryParser($queryBuilder); $result = $queryParser->applyParams(); // done print_r($result);
查询语法
过滤
Q: /users?filter[]=name:ct:admin
R: 将返回包含 admin 字符串的用户的数组
可用的过滤选项
排序
Q: /users?sort[]=name:ASC
R: 将返回按 names 升序排序的用户的数组
分页
Q: /users?limit=10&page=3
R: 将返回用户数组的一部分(从第21项到第30项)
列别名
当与SQL表达式一起选择数据或使用具有模糊列名的连接时,库将自动尝试查找原始列名或其表达式以用于过滤功能。但是,您仍然可以手动定义列别名以更好地使用,特别是当使用连接时解决模糊列名。
例如,在上面的示例中将posts表与categories表连接将返回来自posts表的 id。因此,当我们尝试使用 filter[]=id:in:1,2,3 过滤器获取具有 id 1、2或3的数据时(SQL WHERE IN),我们将遇到模糊列名错误。
以下是 列别名 以解决这个问题。
$queryParser = new \Ngekoding\CodeIgniterApiQueryParser\QueryParser($queryBuilder); // Tell that the `id` is `p.id` (posts table id) $queryParser->addColumnAlias('id', 'p.id'); // Or add multiple aliases at once $queryParser->addColumnAlias([ 'id' => 'p.id', 'title' => 'p.title' ]); $result = $queryParser->applyParams(); // done