この構造を使用して、データベースからデータをフェッチできます。
$user = $this->getDoctrine()
->getRepository('AcmeDemoBundle:Emails')
->find(8081);
そうすると、次のようなデータを取得できます。
$user->getColumnNameHere();
基本的に私はエンティティクラスを使用することができます。
しかし、find
の代わりにQueryBuilderを使用したい場合は、連想配列しか取得できません。
$product->createQueryBuilder('p')
->setMaxResults(1)
->where('p.idx = :idx')
->select('p.columnNameHere')
->setParameter('idx', 8081)
->orderBy('p.idx', 'DESC')
->getQuery();
$product = $query->getResult();
$ productは配列として返されます。 Entity Managaer Classでフェッチすることはできますか?はいの場合、どのように?
私はドキュメントを掘り起こしましたが、それは不可能であるか、ドキュメントに存在しないか、私はただ盲目です:)
はい、できます。通常は次を使用します。
$repository
->createQueryBuilder('p')
->getQuery()
->execute()
;
これにより、エンティティの配列が返されます。
単一のエンティティの結果を取得する場合は、getSingleResult
またはgetOneOrNullResult
のいずれかを使用します。
$repository
->createQueryBuilder('p')
->getQuery()
->getOneOrNullResult()
;
警告:これらのメソッドはNonUniqueResultException
をスローする可能性があります。
編集:わかりました、質問は部分的なオブジェクトについてでした: http://docs.doctrine-project.org/en/latest/ reference/partial-objects.html
「部分オブジェクト」を使用すると、配列の代わりにオブジェクトを取得できます。
doctrineORM2.2.2でテストした例を次に示します。
// create query builder
// $em is the EntityManager
$qb = $em->createQueryBuilder();
// specify the fields to fetch (unselected fields will have a null value)
$qb->select ('partial p.{id,pubDate,title,summary}')
->from ('Project\Entity\Post', 'p')
->where ('p.isActive = 1')
->orderBy ('p.pubDate', 'desc');
$q = $qb->getQuery();
$result = $q->getResult();
var_dump($result); // => object
元のクエリからオブジェクトを返したい場合:
$product->createQueryBuilder('p')
->setMaxResults(1)
->where('p.idx = :idx')
->select('p.columnNameHere')
->setParameter('idx', 8081)
->orderBy('p.idx', 'DESC')
->getQuery();
$product = $query->getResult();
この行を削除
->select('p.columnNameHere')
Selectを使用するとすぐに、配列が返されます...
getResult()
メソッドは、エンティティのコレクション(配列)を返します。オブジェクトを1つだけフェッチする場合は、getSingleResult()
を使用します。
ああ、私はあなたが単一のオブジェクトの単一のフィールドをフェッチしたいことに気づきました。 @Florianが示唆するように、getSingleScalarResult()
を使用します。