Doctrineによるデータベースへのアクセスの基本は以下になります。
1. Controllerクラスからアクセスする
2. Controllerクラスで$this->getDoctrine()->getEntityManager()とやって、エンティティマネージャを取得する
$em = $this->getDoctrine()->getEntityManager();
3. エンティティマネージャ($em)のgetRepositoryメソッドを呼び出して、対象エンティティ(テーブル)のリポジトリ
を得る
$repository = $em->getRepository(‘MyDBCommandBundle:ReportMonitor’)->$func($value);
4. 3.で得られたリポジトリオブジェクトに対して、find系メソッドを使用して必要な情報を得る
$repository->findAll();
1 2 3 |
$em = $this->getDoctrine()->getEntityManager(); $repository = $em->getRepository('MyDBCommandBundle:Hogehoge'); $data = $repository->findAll(); |
すべてのデータを抽出する
1 |
$repository->findAll(); |
単一の一致条件による検索
単一の一致条件による検索をする場合は、それ用のメソッドがリポジトリに用意されます。
たとえば、値段(price)フィールドが100のものを検索したい場合は以下のようにします。
1 |
$repository->findByPrice(100); |
このように「findBy(一致条件)」という形でメソッドを呼び出すことで
そのパラメータ名が一致条件に一致したものの一覧を抽出できます。
複数の一致条件による検索
複数の一致条件による検索をする場合は、findBy()メソッドを使用します。
第一引数には、フィールドとその一致条件の連想配列を、第二引数にはソート条件を
指定します。
たとえば、色(color)がred、かつ、値段が100のものを検索する場合は以下のようにします。
1 |
$repository->findBy(array('color' => 'red', 'price' => 100)); |
また、色がblueのものを値段が安い順に並べるには以下のようにします。
1 |
$repository->findBy(array('color' => 'red'), array('price' => 'ASC')); |
ちなみに、商品が一つの場合は、findBy()ではなくfindOneBy()を使うことで結果へのアクセスが
スマートになります。
の商品を値段の安い順に並べる場合は以下のようにします。