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)。有关更多信息,请参阅 许可文件。