jacoz/doctrine-query-builder-from-request

该包已被弃用且不再维护。未建议替代包。

将请求转换为 doctrine 查询

dev-master 2018-01-29 11:21 UTC

This package is not auto-updated.

Last update: 2018-12-29 20:43:24 UTC


README

一个方便的查询系统 :)

需求

  • PHP >= 5.4
  • Symfony HTTP Foundation > 2.6
  • Doctrine ORM > 2.2.3

安装

使用 Composer

{
    "require": {
        "jacoz/doctrine-query-builder-from-request": "dev-master"
    }
}

参数

参数 类型 有效值 描述 默认值
count 布尔值 true, false 指定查询是否返回元素数量或记录集 false
select 数组 - 要选择字段列表 *
params 对象 - 搜索参数键值对象 {}
boolStrategy 字符串 AND, OR 指定默认布尔策略 AND
joins 对象 - 关系和别名键值对象 null
sorting 对象 - 字段和方向的键值对象 null
limit 整数 数字 最大结果数 null
offset 整数 数字 起始偏移量 null

用法

您的控制器可能是这样的

<?php
namespace Acme\MainBundle\Controller;

use Jacoz\Doctrine\ORM\QueryBuilderFromRequest\QueryBuilder;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;

class DefaultController extends Controller
{
    public function indexAction(Request $request)
    {
        $repository = $this->getDoctrine()->getManager()->getRepository('AcmeMainBundle:Person');
        $qb = new QueryBuilder($repository, $request);

        $results = $qb->getResult();

        return new JsonResponse($results);
    }
}

查询示例

{
    "boolStrategy": "OR",
    "count": false,
    "select": [
        "id",
        "name",
        ["c.name", "city"]
    ],
    "params": {
        "c.id": [
            1,
            2
        ],
        "height": "> 175",
        "birthday": {
            "type": "date",
            "from": "1980-01-01",
            "to": "1989-12-31"
        },
        "salary": {
            "type": "numeric",
            "from": 50000,
            "to": 70000
        },
        "x": {
            "type": "instance_of",
            "class": "Acme\\DemoBundle\\Entity\\Employee"
        }
    },
    "joins": {
        "city": "c"
    },
    "sorting": {
        "c.name": "ASC",
        "name": "ASC"
    },
    "limit": 100,
    "offset": 0
}