Query builder
Pour pouvoir créer des requêtes pour spécifiques que celles fournies par défaut, il faudra alimenter le dépôt lié à l'entité.
Pour la classe
Profile
:
/** * @ORM\Entity(repositoryClass="App\Repository\ProfileRepository") */ class Profile {
Le dépôt, fichier src/Repository/ProfileRepository créé par la console, utilise le Query Builder et il est défini ainsi :
// src/Repository/ProfileRepository namespace App\Repository; use App\Entity\Profile; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Symfony\Bridge\Doctrine\RegistryInterface; /** * @method Profile|null find($id, $lockMode = null, $lockVersion = null) * @method Profile|null findOneBy(array $criteria, array $orderBy = null) * @method Profile[] findAll() * @method Profile[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ class ProfileRepository extends ServiceEntityRepository { { public function myFindById($id) { $qb = $this->createQueryBuilder ( 'a' ); $qb->where ( 'a.id = :id' )->setParameter ( 'id', $id ); return $qb->getQuery ()->getResult (); } }
On l'utilise comme tout autre finder dans la contrôleur
$em = $this->getDoctrine ()->getManager (); $repository = $em->getRepository ( 'LPARSDiabloBundle:Profile' ); $profile = $repository->myfindById ($id);
Aller plus loin
Query Builder permet de créer des requêtes complexes
$qb->where('a.battletag like :battletag') ->setParameter('battletag', '%'.battletag.'%') ->andWhere('a.date < :date') ->setParameter('date', date) ->orderBy('a.date', 'DESC');http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/query-builder.html