定制 zooxsmart/los-uql 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

zooxsmart/los-uql

最新稳定版本:1.0.0

Composer 安装命令:

composer require zooxsmart/los-uql

包简介

PHP library to transform url query into db partial queries

README 文档

README

Build Status Coverage Status Latest Stable Version Total Downloads License

This library utilizes url query parameters and generates db queries.

At this moment, it provides integration with:

Planned:

Installing

 composer require los/uql

Usage

The builder uses the query parameters 'q' for the queries and 'h' for hint (sort, order, limits, etc). You can change these in the constructor:

$builder = new ZendDbBuilder($select, 'query', 'hint');

The Select instance returned by the builder methods is a clone from the one passed in the constructor.

Zend DB

Passing the request directly:

public function handle(ServerRequestInterface $request): ResponseInterface
{
    $select = new \Laminas\Db\Select('table');
    $select = (new ZendDbBuilder($select))->fromRequest($request);
    $statement = $sql->prepareStatementForSqlObject($select);
    $results = $statement->execute();
}

or manually passing the parameters:

public function handle(ServerRequestInterface $request): ResponseInterface
{
    $queryParams = $request->getQueryParams();
    $query = $queryParams['q'] ?? [];
    $hint = $queryParams['h'] ?? [];

    $select = new \Laminas\Db\Select('table');
    $select = (new ZendDbBuilder($select))->fromParams($query, $hint);
    $statement = $sql->prepareStatementForSqlObject($select);
    $results = $statement->execute();
}

Examples:

operation url query select
equal ?q={"id":1} WHERE id = 1
not ?q={"id":{"$not":1}} WHERE id != 1
in ?q={"id":{"$in":[1,2]}} WHERE id IN (1, 2)
nin ?q={"id":{"$nin":[1,2]}} WHERE id NOT IN (1, 2)
like ?q={"name":{"$like":"John%"}} WHERE name LIKE 'John%'
null ?q={"$null":"name"} WHERE name IS NULL
not null ?q={"$nnull":"name"} WHERE name IS NOT NULL
and ?q={"$and":[{"id":1},{"name":"John"}]} WHERE id = 1 AND name = 'John'
or ?q={"$or":[{"id":1},{"name":"John"}]} WHERE id = 1 OR name = 'John'
greater ?q={"price":{"$gt":100}} WHERE price > 100
greater or equal ?q={"price":{"$gte":100}} WHERE price >= 100
less ?q={"price":{"$lt":100}} WHERE price < 100
less or equal ?q={"price":{"$lte":100}} WHERE price <= 100
between ?q={"price":{"$bt":[100,200]}} WHERE price >= 100 AND price <= 200

You can mix and nest queries:

url query select
?q={"id":{"$not":1},"$or":[{"id":2},{"id":"3"}],"$and":[{"id":2},{"name":"test"}]} WHERE "id" != '1' AND ("id" = '2' OR "id" = '3') AND ("id" = '2' AND "name" = 'test')
?q={"$or":[{"$and":[{"id":1},{"name":"test"}]},{"id":{"$not":1}},{"name":"test"}]} WHERE (("id" = '1' AND "name" = 'test') OR "id" != '1' OR "name" = 'test')

Hint examples:

operation url query select
sort ?q={"id":1}&h={"$sort":"name"} WHERE id = 1 ORDER BY name asc, price DESC
sort ?q={"id":1}&h={"$sort":{"name":"asc","price":-1}} WHERE id = 1 ORDER BY name asc, price DESC
limit ?q={}&h={"$limit":10} SELECT * FROM table LIMIT 10
limit + skip ?q={}&h={"$limit":10,"$skip":20} SELECT * FROM table LIMIT 10 SKIP 10

统计信息

  • 总下载量: 1.33k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 2
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2024-02-02