Créer une requête SQL native dans Symfony2 avec Doctrine2

Il peut être intéressant voir obligatoire dans certains cas complexes d’avoir recours aux requêtes SQL native directement dans Symfony2, tout en passant par l’ORM et en récupérant des objets à la suite de cette requête.

Voici un exemple d’utilisation dans un Repository Symfony2:

use Doctrine\ORM\Query\ResultSetMapping;
$rsm = new ResultSetMapping();
$rsm->addEntityResult('Novaway\Bundle\CmsBundle\Entity\Project', 'p');
$rsm->addFieldResult('p', 'id', 'id');
$rsm->addFieldResult('p', 'title', 'title');

$sql = 'SELECT p.id, p.title FROM project p JOIN project_related pr ON p.id = pr.related_project_id WHERE pr.project_id = ?';

$query = $this->_em->createNativeQuery($sql, $rsm);
$query->setParameter(1, $idProject);

$projects = $query->getResult();

12 réflexions au sujet de « Créer une requête SQL native dans Symfony2 avec Doctrine2 »

  1. Au lieu de mapper manuellement chacun des champs, on peut utiliser Doctrine\ORM\Query\ResultSetMappingBuilder qui va ajouter tous les champs d’une entité.
    En 2 lignes :
    $rsm = new ResultSetMappingBuilder($this->getEntityManager());
    $rsm->addRootEntityFromClassMetadata(‘MonBundle:MonEntite’, ‘alias’);

  2. Hello,

    Super intéressant, merci de l’info. Par contre comment fais-je pour récupérer les informations en objet.

    J’essaie d’accéder à mes infos de facon habituelle mais il dit que je ne travaille pas sur un objet…

    Tu peux m’expliquer comment accéder à mon objet?

    A+

    • Just one more great way to save lots of income upon auto tires is aawlys to employ payless coupon codes. You can choose a lot of discount coupons regarding different elements. You’ll find inexpensive exhaust coupon codes and affordable auto deals while successfully which can be employed for car repairs. A price reduction car voucher might be incredibly handy if you’re holding serp issues. Coupons are a great way in order to maintain bucks high are a variety of discount codes easily available on the market. The highest approach to discover a discount that you can use is to appear and feel on their behalf in the magazine. You may also learn coupon codes for the on the web. It is possible to track down discount codes on-line or perhaps get very simple computer discount coupons from a site.

  3. Bonjour ,
    Merci pour le boup de code , je l’ai essayé , ca marche Nickel , mais il parait que il manque quelque chose de plus .
    par exemple je veux afficher autre champs d’une autre classe , pour votre cas les champs de l’alias ‘ pr ‘ .
    du coup si je met :
    $rsm->addFieldResult(‘pr’, ‘champ’, ‘champ’);
    ca se produit un erreur comme suit :
    Notice: Undefined index: id in chamin/nom/du/class

    vous avez des idées svp ?

  4. Ping : Symfony2 直接SQLを実行 - LOCAL COLOR BLOG

  5. bonjour,
    est ce que pour un simple join Doctrine devient trop complexe? au vu de ta requête. Je lutte un peu avec les join c’est pour ça que je le dis

    • Non, il est tout à fait possible de faire des joins et d’effectuer des requêtes complexes en DQL (doctrine query language).

      exemple:
      $result = $em->createQueryBuilder(‘entity’)->leftJoin(‘entity.otherEntity’, ‘oe’)->addSelect(‘oe’)->orderBy(‘e.position’,'ASC’)->getQuery()->getResult();

  6. Ping : Procédures stockées Symfony2 avec Doctrine2 | Tony BRAMNIK

  7. Bonjour et bravo pour ce blog de développeur SF2. Effectivement doctrine est un outil très puissant et je recommande à mes dev de l’utilise. D’ailleurs, pour faire du bon boulot en création de site internet ou d’outils métiers, nous n’avons pas trop le choix ! En tout cas, ce type est très complet et je me permettrai de le consulter un peu plus souvent. @ ++

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>