Skip to content

Latest commit

 

History

History
131 lines (106 loc) · 3.48 KB

01.filter.0.md

File metadata and controls

131 lines (106 loc) · 3.48 KB

Filter (simple) [accepted]

Shop

{
    "id": 492440,
    "state": "active",
    "verticalId": 2,
    "company": null,
    "address": null,
    "phoneCostsinfo": null,
    "email": "shop492440@localhost",
    "commissionRateDefault": null,
    "commissionRates": [],
    "basicCharge": false,
    "paymentCommissionFee": 4.5,
    "bankData": null,
    "createdAt": "2017-12-10 21:00:12"
}

Request example [accepted]

GET /shops?filter[state][neq]=active&filter[verticalId][eq]=2&filter[paymentCommissionFee][gt]=3

Client

<?php

// http://docs.guzzlephp.org/en/stable/quickstart.html#query-string-parameters
$guzzleClient = new \GuzzleHttp\Client();
$guzzleResponse = $guzzleClient->request('GET', 'http://localhost/shops', [
    'query' => [
        'filter' => [
            'state' => [
                'neq' => 'active',
            ],
            'verticalId' => [
                'eq' => 2,
            ],
            'paymentCommissionFee' => [
                'gt' => 3,
            ],
        ],
    ],
]);


// http://php.net/manual/en/function.http-build-query.php
$queryString = http_build_query([
    'filter' => [
        'state' => [
            'neq' => 'active',
        ],
        'verticalId' => [
            'eq' => 2,
        ],
        'paymentCommissionFee' => [
            'gt' => 3,
        ],
    ],
]);
$url = 'http://localhost/shops?' . $queryString;

Server

<?php

/** @var \Doctrine\ORM\EntityManager $entityManager */
$entityManager = $this->getDoctrine()->getManager();

/** @var \Doctrine\ORM\QueryBuilder $queryBuilder */
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder->select('s')->from('Shop', 's');

$filterData = $request->query->get('filter', []);

/** @var \Symfony\Component\EventDispatcher\EventDispatcher $eventDispatcher */
$eventDispatcher->dispatch('queryBuilderCreated', new Event($queryBuilder, $filterData, Shop::class));

$result = $queryBuilder->getQuery()->getArrayResult();

The Expr class

<?php
// http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/query-builder.html#the-expr-class
class Expr
{
    // Example - $queryBuilder->expr()->eq('u.id', '?1') => u.id = ?1
    public function eq($x, $y);

    // Example - $queryBuilder->expr()->neq('u.id', '?1') => u.id <> ?1
    public function neq($x, $y);

    // Example - $queryBuilder->expr()->lt('u.id', '?1') => u.id < ?1
    public function lt($x, $y);

    // Example - $queryBuilder->expr()->lte('u.id', '?1') => u.id <= ?1
    public function lte($x, $y);

    // Example - $queryBuilder->expr()->gt('u.id', '?1') => u.id > ?1
    public function gt($x, $y);

    // Example - $queryBuilder->expr()->gte('u.id', '?1') => u.id >= ?1
    public function gte($x, $y);

    // Example - $queryBuilder->expr()->isNull('u.id') => u.id IS NULL
    public function isNull($x);

    // Example - $queryBuilder->expr()->isNotNull('u.id') => u.id IS NOT NULL
    public function isNotNull($x);

    // Example - $queryBuilder->expr()->in('u.id', array(1, 2, 3))
    public function in($x, $y);

    // Example - $queryBuilder->expr()->notIn('u.id', '2')
    public function notIn($x, $y);

    // Example - $queryBuilder->expr()->like('u.firstname', $qb->expr()->literal('Gui%'))
    public function like($x, $y);

    // Example - $queryBuilder->expr()->notLike('u.firstname', $qb->expr()->literal('Gui%'))
    public function notLike($x, $y);

    // Example - $queryBuilder->expr()->between('u.id', '1', '10')
    public function between($val, $x, $y);
}