kalimulhaq / json-query
使用 JSON 查询字符串构建 Laravel 查询
Requires
- php: ^7.2|^8.0
- illuminate/support: ^7.0|^8.0
- netresearch/jsonmapper: ^3.0
Requires (Dev)
- orchestra/testbench: ^4.0
- phpunit/phpunit: ^8.0
README
JsonQuery 是一种针对 Laravel/Lumen API 的查询语言,可以将 JSON 查询转换为 Laravel Eloquent ORM 查询。
安装
您可以通过 composer 安装此包
composer require kalimulhaq/json-query
用法
use Illuminate\Http\Request; use Kalimulhaq\JsonQuery\JsonQueryFacade as JsonQuery; class UsersController extends Controller { public function index(Request $request) { $this->user = $request->user(); $json2query = JsonQuery::init('App\User', $request->filter); $json2query->buildQuery(); $json2query->buildResult($request->limit, $request->page); $result = $json2query->result(); $meta = $json2query->meta(); return response()->json(['data' => $result, 'paginator' => $meta]); } }
过滤
filter
是一个有效的 JSON 字符串,其形式如下
{ "select": [], "where": {}, "order": [], "include": [], "include_count": [], "scopes": [] }
示例
{ "select": ["id","first_name","last_name","email","phone"], "where": { "wildcard": { "fields": ["first_name","last_name","email","role.name"], "value": "any keyword" }, "and": [ { "field": "email", "operator": "like", "value": "test@email.com" }, { "field": "phone", "value": "123456789" }, { "or": [ { "field": "first_name", "operator": "like", "value": "kalim" }, { "field": "first_name", "operator": "like", "value": "juli" } ] }, { "field": "role", "operator": "where_has", "value": { "and": [ { "field": "name", "value": "admin" } ] } } ] }, "include": [ { "relation": "role", "select": ["id","name"], "include": [ { "relation": "permission", "select": ["id","name"] } ] } ], "include_count": [ { "relation": "task" } ], "order": [ { "field": "first_name", "order": "asc" }, { "field": "last_name", "order": "asc" } ] }
选择
select
是从基础模型中选择的列的数组,如果删除 *
,则将使用 *
Where
where
是一个有效的 JSON 对象,用于构造 WHERE
子句
{ "and": [], "or": [], "field": "", "value": "", "operator": "", "sub_operator": "" }
and
使用 AND
将 where 子句组合
or
使用 OR
将 where 子句组合
both and
和 or
都是对象的数组,每个对象代表一个 where
子句
{ "field": "", "value": "", "operator": "", "sub_operator": "" }
如果删除 operator
,则默认使用 =
(可选)外部的 field, value, operator, sub_operator
将创建一个单独的 where 子句,该子句将与 and
和 or
组合使用 AND
组合。
field
列名或关系名,如果操作符是 has
,not_has
,where_has
或 where_not_has
,则该字段被视为关系
value
用于搜索的任何类型的值。如果操作符是 has
,not_has
,where_has
或 where_not_has
,则该值将是 where
类型的对象
operator
支持的运算符有 =
,!=
,<
,>
,<=
,>=
,between
,not_between
,in
,not_in
,null
,not_null
,date
,day
,moth
,year
,time
,like
,has
,not_has
,where_has
和 where_not_has
sub_operator
子操作符仅在 operator
为 has
或 not_has
时需要,支持的子操作符有 =
,!=
,<
,>
,<=
,>=
排序
排序用于对行进行排序。 order
是对象数组
[ { "field": "first_name", "order": "asc" } ]
包含
为了包含相关模型。 include
是一个具有与根 filter
(见上面) 对象相同结构的对象数组,并具有额外的 relation
属性。
{ "relation":"", "select": [], "where": {}, "order": [], "include": [], "include_count": [], "scopes": [] }
包含计数
为了包含相关模型的计数。 include_count
是对象数组。
{ "relation":"", "where": {} }
变更日志
请参阅 CHANGELOG 以获取有关最近更改的更多信息。
鸣谢
许可
MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件。