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