[Symfony] Utiliser un query builder spécifique dans le YAML EasyAdmin pour configurer les widgets de type entité
Publié le 07/05/2019 • Actualisé le 07/05/2019
Quand on édite une entité avec le bundle EasyAdmin et que celle-ci a des relations avec d'autres entités, prfois, nous ne voulons pas afficher toutes les lignes possibles mais nous voulons filtrer celles pouvant être sélectionnées. Pour ce faire, on peut utiliser l'option query_builder
du type Entity. On peut utiliser une fonction statique du repository de l'entité cible : celle-ci va automatiquement recevoir comme premier argument le repository de cette même entité. Dans cet exemple on exclut les entités ayant une date de début expirée.
# app/config/easy_admin.yml
easy_admin:
# ...
entities:
Activity:
class: EventBundle\Entity\Activity
form:
fields:
- { property: 'event', type: 'entity', type_options: { class: 'EventBundle\Entity\Event', required: true, multiple: false, query_builder: 'EventBundle\Entity\EventRepository::adminQueryBuilderForFeEvents' }, css_class: 'col-sm-6' }
<?php
// src/EventBundle/Entity/EventRepository.php
use Doctrine\ORM\QueryBuilder;
/**
* Admin filter: don't display past events.
*/
public static function adminQueryBuilderForFeEvents(EventRepository $r): QueryBuilder
{
return $r->createQueryBuilder('e')
->innerJoin('e.eventType', 'et')
->where('et.id = :event_type')
->setParameter('event_type', 1)
->andWhere('e.startDate > :now')
->setParameter('now', date_create())
->orderBy('e.id', 'DESC');
}
Plus sur Stackoverflow Snippet aléatoire