Download the PHP package mf/query-builder-composer without Composer
On this page you can find all versions of the php package mf/query-builder-composer. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download mf/query-builder-composer
More information about mf/query-builder-composer
Files in mf/query-builder-composer
Package query-builder-composer
Short Description QueryBuilderComposer for easier composing Doctrine\ORM\QueryBuilder parts
License MIT
Informations about the package query-builder-composer
Query Builder Composer
QueryBuilderComposer for easier composing Doctrine\\ORM\\QueryBuilder
parts
Install
Compose parts for QueryBuilder
Parts
are array of:
- modifiers
- rules
Modifier:
Modifier
is ANY callable
by this pattern: (QueryBuilder -> QueryBuilder)
example of Modifiers
:
- (anonymus function): [ function(QueryBuilder $qb) { return $qb->select('...'); }, ... ]
- (static function) : [ [$this, 'modifyQueryBuilder'], ... ]
- (closure) : [ $addSelectModifier, ... ]
- (Modifier) : [ new Modifier('...'), ... ]
- ...
Rule:
Rule
represents any QueryBuilder
method call
- array of
strings
- array of single
string
(separator isspace
) - just a single
string
(separator isspace
)
Let's say we have this QueryBuilder
method call:
example of Rules
:
(QueryBuilder method call) : (rule representation)
- $qb->select('t.column') : ['select', 't.column']
- $qb->join('t.joined', 'j') : ['join', 't.joined', 'j']
- $qb->from('table', 't') : ['from', 'table', 't']
- $qb->from('table', 't') : ['from table t']
- $qb->from('table', 't') : 'from table t'
- ...
Usage
Why? What is a problem?
If you have complex methods for building Query
via QueryBuilder
, you might be in same situation as I am.
I have many similar methods to build different Queries
and I cant see a clear way how to reuse my QueryBuilder
parts.
So I decided to create this QueryBuilderComposer
to make this issue easier.
Example of complex methods with duplicated parts
Methods are simplified so they might not be 100% correct.
Now you can have some idea of those parts which are same for more cases and they can be composed and defined once!
Composition of parts
Step 1 (rewrite to QueryBuilderComposer
)
Step 2 (store common rules to class constants to allow easier reuse)
Step 3 (compose parts)
Step 4 (use syntax sugar over array_merge
)
Difference between compose
vs mergeCompose
Conclusion
You can merge, compose and reuse your QueryBuilder
parts easy.
Example above is just quick solution. You can do much more patterns over this composition
:
- implement
Modifier
to do something withQueryBuilder
- implement
Closure
to be reapplied again - ...