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