Wallogit.com
2017 © Pedro Peláez
Generate filters for queryBuilder in a repository
The QueryBuilderRepositoryGeneratorBundle generates Repositories in the repository folders, (*1)
The functions allow to filter on the columns of the entity with a query builder., (*2)
See the create queries section for an example., (*3)
composer require --dev "tbn/query-builder-repository-generator-bundle"
if ('dev' === $this->getEnvironment()) {
$bundles[] = new Tbn\QueryBuilderRepositoryGeneratorBundle\QueryBuilderRepositoryGeneratorBundle();
}
Add the bundles you want:, (*4)
query_builder_repository_generator:
bundles:
- "<<YourBundleName>>"
Those bundles will have the repositories generated in the Repository directory of the bundles. Check the content by yourself., (*5)
query_builder_repository_generator:
templates:
top_repository: "QueryBuilderRepositoryGeneratorBundle:Generator:TopRepositoryTemplate.html.twig"
column: "QueryBuilderRepositoryGeneratorBundle:Generator:ColumnTemplate.html.twig"
association: "QueryBuilderRepositoryGeneratorBundle:Generator:AssociationTemplate.html.twig"
bottom_repository: "QueryBuilderRepositoryGeneratorBundle:Generator:BottomRepositoryTemplate.html.twig"
mapping:
- 'AppBundle\Entity\Member':
querybuilder_name: 'memberEntity' # the name of the entity used in the queryBuilder
You can specify a class to extends for each entity., (*6)
repositories_extensions:
- "AcmeBundle\Entity\Item": #the entity class
extension_class: "\\Gedmo\\Tree\\Entity\\Repository\\MaterializedPathRepository" #the class to extends
The templates used by the generator can be set with these configurations., (*7)
top_repository => The beginning of the repository file
column => The template used for each column
extra_column => A custom template of your choice
bottom_repository => The end of the repository file
The extra_column template have the following variables:, (*8)
'entity' => $tableName,
'entityDql' => lcfirst($tableName),
'column' => ucfirst($columnName),
'columnDql' => $columnName
In your Entity Repository, extends the generated repository., (*9)
class UserRepository extends UserRepositoryBase
Your repository has now some predefined function like "filterById", "filterInId" for all the columns., (*10)
Example:, (*11)
$qb = $this->createQueryBuilder('document');
//filter on current user (where XX = YY)
DocumentRepository::filterByUser($qb, $user);
//filter on the extension list (where xxx IN () )
DocumentRepository::filterInExtension($qb, $extensionList);
//Join the tag entity
$qb->join('document.tags', 'tag');
//filter on the tag entity
TagRepository::filterById($qb, $tagButton);
Run the command:, (*12)
php app/console qbrg:generate