2017 © Pedro Peláez
 

library query

It simply transforms the given filters, sortings and paging to a Doctrine or Eloquent query. Handy for interal usage or it can be used for API's.

image

onemustcode/query

It simply transforms the given filters, sortings and paging to a Doctrine or Eloquent query. Handy for interal usage or it can be used for API's.

  • Tuesday, November 28, 2017
  • by onemustcode
  • Repository
  • 1 Watchers
  • 2 Stars
  • 2,262 Installations
  • PHP
  • 1 Dependents
  • 0 Suggesters
  • 2 Forks
  • 5 Open issues
  • 25 Versions
  • 38 % Grown

The README.md

Build Status Total Downloads Latest Stable Version License, (*1)

Query

It simply transforms the given filters, sortings and paging to a Doctrine or Eloquent query. Handy for interal usage or it can be used for API's., (*2)

Installation

Require the Query library trough composer., (*3)

composer require onemustcode/query

Query

The Query holds the paging, sortings, filters and includes., (*4)

Create new Query instance;, (*5)

$query = new Query();

Paging

Change the results per page;, (*6)

$query->getPaging()->setPerPage(50);

Change the page;, (*7)

$query->getPaging()->setPage(5);

Create an Query instance directly from given Paging object;, (*8)

$query = Query::createFromPaging(new Paging(3, 40));

Filtering

The following filters can be used;, (*9)

Type Class
Equals new Equals('field', 'value')
Not Equals new NotEquals('field', 'value')
Greather than new GreatherThan('field', 20)
Greather than or Equals new GreatherThanOrEquals('field', 25)
Less than new LessThan('field', 50)
Less than or Equals new LessThanOrEquals('field', 55)
Is null new IsNull('field')
Is not null new IsNotNull('field')
In new In('field', '1,2,3,4,5')
Not in new NotIn('field', '1,2,3,4,5')
Like new Like('field', '%ohn%')

Add new filter to existing Query instance;, (*10)

$query->addFilter(new Equals('last_name', 'john'));

Create an Query instance directly from one or more filters;, (*11)

$query = Query::createFromFilters([
    new Equals('name', 'john),
    new GreatherThan('age', 23),
]);

Sorting

Add new sorting to existing Query instance;, (*12)

$query->addSorting(new Ascending('last_name'));

Create an Query instance directly from one or more sortings;, (*13)

$query = Query::createFromSortings([
    new Ascending('name'),
    new Descending('score'),
]);

Includes

Add new include to existing Query instance;, (*14)

$query->addInclude('posts.comments);

Create an Query instance directly from one or more includes;, (*15)

$query = Query::createFromIncludes([
    'relation', 'some_other.relation'
]);

Builder

Warning: The Builder class is deprecated, use the transformer instead., (*16)

The builder turns an given array to an Query instance;, (*17)

$data = [
    'per_page' => 20,
    'page' => 2,
    'filters' => [
        'age' => ['eq' => 15],
        'last_name' => ['like' => 'doe%'],
    ],
    'sortings' => [
        'first_name' => 'asc',
        'score' => 'desc',
    ],
];

$builder = new Builder($data);
$query = $builder->build();

Transformer

The builder transforms an given array to an Query instance;, (*18)

$data = [
    'per_page' => 20,
    'page' => 2,
    'filters' => [
        'age' => ['eq' => 15],
        'last_name' => ['like' => 'doe%'],
    ],
    'sortings' => [
        'first_name' => 'asc',
        'score' => 'desc',
    ],
];

$transformer = new Transformer();
$query = $transformer->transform($data);

It is possible to add your own custom filters. In order to do this you should pass them as an associative array in the constructor (note that the filter should implement the OneMustCode\Query\Filters\FilterInterface]). The key should be the filters's operator and the value the filter's FQN;, (*19)

$transformer = new Transformer([CustomFilter::OPERATOR => CustomFilter::class]);
$query = $transformer->transform($data);

Writer

The writer can export the given Query instance to json, query parameters and an array., (*20)

Json

$writer = new Writer($query);
$parameters = $writer->toJson();

Array

$writer = new Writer($query);
$parameters = $writer->toArray();

Query parameters

$writer = new Writer($query);
$parameters = $writer->toQueryParameters();

Doctrine Query Builder

The following example code shows you how to use the Doctrine Query Builder. Just pass the Query instance, Doctrine Query Builder, the accepted filters or sortings and it will automatically generate the query for you., (*21)

Example;, (*22)

// Get the Doctrine Query Builder
$queryBuilder = $this->createQueryBuilder('e');

// Create new Query instance from given filters en sortings
$query = new Query(null, [
    new GreatherThan('age', 25),
    new LessThan('age', 55),
], [
    new Ascending('last_name')),
]);

// Only accept certain sortings that can be added to the doctrine query builder
$acceptedSortings = [
    // Given field => Doctrine property
    'age' => 'e.age',
];

// Only accept certain filters that can be added to the doctrine query builder
$acceptedFilters = [
    // Given field => Doctrine property
    'first_name' => 'e.firstName',
    'last_name' => 'e.lastName',
    'age' => 'e.age',
];

// Build the query
$queryBuilder = (new QueryBuilder())->build($query, $queryBuilder, $acceptedFilters, $acceptedSortings);

// Retrieve the results via Doctrine
$results = $queryBuilder->getQuery()->getResults();

It is possible to add your own custom filter handlers. In order to do this you should pass in the handler in the QueryBuilder's constructor (note that the filter handler should implement the OneMustCode\Query\Builders\Doctrine\Filters\FilterHandlerInterface);, (*23)

$queryBuilder = (new QueryBuilder([new CustomFilterHandler()]))->build($query, $queryBuilder, $acceptedFilters, $acceptedSortings);

License

MIT, (*24)

The Versions

28/11 2017

dev-master

9999999-dev

It simply transforms the given filters, sortings and paging to a Doctrine or Eloquent query. Handy for interal usage or it can be used for API's.

  Sources   Download

MIT

The Requires

  • php >=5.6.4

 

The Development Requires

by Jeffrey Buitenhuis

laravel api eloquent doctrine symfony query filtering paging sorting

28/11 2017

v1.1.6

1.1.6.0

It simply transforms the given filters, sortings and paging to a Doctrine or Eloquent query. Handy for interal usage or it can be used for API's.

  Sources   Download

MIT

The Requires

  • php >=5.6.4

 

The Development Requires

by Jeffrey Buitenhuis

laravel api eloquent doctrine symfony query filtering paging sorting

02/10 2017

v1.1.5

1.1.5.0

  Sources   Download

MIT

The Requires

  • php >=5.6.4

 

The Development Requires

by Jeffrey Buitenhuis

query

22/08 2017

v1.1.4

1.1.4.0

  Sources   Download

MIT

The Requires

  • php >=5.6.4

 

The Development Requires

by Jeffrey Buitenhuis

query

22/08 2017

v1.1.3

1.1.3.0

  Sources   Download

MIT

The Requires

  • php >=5.6.4

 

The Development Requires

by Jeffrey Buitenhuis

query

22/08 2017

v1.1.2

1.1.2.0

  Sources   Download

MIT

The Requires

  • php >=5.6.4

 

The Development Requires

by Jeffrey Buitenhuis

query

19/08 2017

v1.1.1

1.1.1.0

  Sources   Download

MIT

The Requires

  • php >=5.6.4

 

The Development Requires

by Jeffrey Buitenhuis

query

17/08 2017

v1.1.0

1.1.0.0

  Sources   Download

MIT

The Requires

  • php >=5.6.4

 

The Development Requires

by Jeffrey Buitenhuis

query

14/08 2017

v1.0.11

1.0.11.0

  Sources   Download

MIT

The Requires

  • php >=5.6.4

 

The Development Requires

by Jeffrey Buitenhuis

query

09/08 2017

v1.0.10

1.0.10.0

  Sources   Download

MIT

The Requires

  • php >=5.6.4

 

The Development Requires

by Jeffrey Buitenhuis

query

16/05 2017

v1.0.9

1.0.9.0

  Sources   Download

MIT

The Requires

  • php >=5.6.4

 

The Development Requires

by Jeffrey Buitenhuis

query

08/05 2017

v1.0.8

1.0.8.0

  Sources   Download

MIT

The Requires

  • php >=5.6.4

 

The Development Requires

by Jeffrey Buitenhuis

query

03/04 2017

v1.0.7

1.0.7.0

  Sources   Download

MIT

The Requires

  • php >=5.6.4

 

The Development Requires

by Jeffrey Buitenhuis

query

23/03 2017

v1.0.6

1.0.6.0

  Sources   Download

MIT

The Requires

  • php >=5.6.4

 

The Development Requires

by Jeffrey Buitenhuis

query

08/03 2017

v1.0.5

1.0.5.0

  Sources   Download

MIT

The Requires

  • php >=5.6.4

 

The Development Requires

by Jeffrey Buitenhuis

query

08/03 2017

v1.0.4

1.0.4.0

  Sources   Download

MIT

The Requires

  • php >=5.6.4

 

The Development Requires

by Jeffrey Buitenhuis

query

08/03 2017

v1.0.3

1.0.3.0

  Sources   Download

MIT

The Requires

  • php >=5.6.4

 

The Development Requires

by Jeffrey Buitenhuis

query

26/02 2017

v1.0.2

1.0.2.0

  Sources   Download

MIT

The Requires

  • php >=5.6.4

 

The Development Requires

by Jeffrey Buitenhuis

query

26/02 2017

v1.0.1

1.0.1.0

  Sources   Download

MIT

The Requires

  • php >=5.6.4

 

The Development Requires

by Jeffrey Buitenhuis

query

25/02 2017

v1.0.0

1.0.0.0

  Sources   Download

MIT

The Requires

  • php >=5.6.4

 

The Development Requires

by Jeffrey Buitenhuis

query

25/02 2017

v0.1.4

0.1.4.0

  Sources   Download

MIT

The Requires

  • php >=5.6.4

 

The Development Requires

by Jeffrey Buitenhuis

query

12/02 2017

v0.1.3

0.1.3.0

  Sources   Download

MIT

The Requires

  • php >=5.6.4

 

The Development Requires

by Jeffrey Buitenhuis

query

04/02 2017

v0.1.2

0.1.2.0

  Sources   Download

MIT

The Requires

  • php >=5.6.4

 

The Development Requires

by Jeffrey Buitenhuis

query

04/02 2017

v0.1.1

0.1.1.0

  Sources   Download

MIT

The Requires

  • php >=5.6.4

 

The Development Requires

by Jeffrey Buitenhuis

query

04/02 2017

v0.1.0

0.1.0.0

  Sources   Download

MIT

The Requires

  • php >=5.6.4

 

The Development Requires

by Jeffrey Buitenhuis

query