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