Symfony2 直接SQLを実行

Table of Contents

ORMを使うパターン

use Doctrine\ORM\Query\ResultSetMapping;
use Doctrine\ORM\Query\ResultSetMappingBuilder;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Tools\Setup;

//とりあえず、たくさんインポート  中略    
$em = $this->getDoctrine()->getEntityManager();
$rsm = new ResultSetMapping();
$rsm->addEntityResult('Acme\HelloBundle\Entity\Post', 'p');
$rsm->addFieldResult('p', 'id', 'id');
//第2引数がDBカラム名、第3引数がエンティティーのフィールド名  
$rsm->addFieldResult('p', 'name', 'name');
$query = $em->createNativeQuery('SELECT id, name FROM Post WHERE id = ?', $rsm);
$query->setParameter(1, 123);
$resulet =  $query->getArrayResult();//getArrayResult()は配列で取得    
//getResult() もあるがなんだかよくわからない。

 

 

ORMを使わないパターン

$stmt = $this->getDoctrine()->getEntityManager()->getConnection()->prepare('select * from mimicry_ranking');
$stmt->execute();
$result = $stmt->fetchAll();//どうやってバインドするかは不明

//まあでもいい感じ結果取得できてます。

 

 

参考URL

Doctrine2 で SELECT を実行する
SQL だけと比べてさまざまなやりかたを比較してみた。エンティティクラスは次のとおり。 namespace Entities; /** @Entity **/ class Post { /** @Id @GeneratedValue @Co...
Créer une requête SQL native dans Symfony2 avec Doctrine2 | Mémos Symfony2
301 Moved Permanently
10分ぐらいで学べるSymfony2 〜Doctrine2のassociationsを見てみる〜 - taka512's blog
masterとcategoryのように複数テーブルに情報が分かれている場合でもDoctrine2はよろしくMAPしてくれます。 ただ、ORMを使っているとSQLが直接見えない分、残念なSQLになってしまう事があるので挙動を調べたメモです。 ...
http://blog.xfloyd.net/?p=600
Doctrine の DBAL レイヤーの使用方法 | Symfony2日本語ドキュメント
データベースと Doctrine (“The Model”) | Symfony2日本語ドキュメント