16

この構造を使用して、データベースからデータを取得できます。

$user = $this->getDoctrine()
->getRepository('AcmeDemoBundle:Emails')
->find(8081);

これを行うと、次のようにデータを取得できます。

$user->getColumnNameHere();

基本的にEntity Classを利用できます。

しかし、代わりに QueryBuilder を使用したい場合はfind、連想配列しか取得できません。

$product->createQueryBuilder('p')
        ->setMaxResults(1)
        ->where('p.idx = :idx')
        ->select('p.columnNameHere')
        ->setParameter('idx', 8081)
        ->orderBy('p.idx', 'DESC')
        ->getQuery();
        $product = $query->getResult();

$product は配列として返されます。jエンティティマネージャクラスで取得できますか? はいの場合、どのように?

私はドキュメントを掘り下げますが、それは不可能であるか、ドキュメントに存在しないか、または私は盲目です:)

4

4 に答える 4

28

はい、できます。通常は次を使用します。

$repository
    ->createQueryBuilder('p')
    ->getQuery()
    ->execute()
;

これにより、エンティティの配列が返されます。

単一のエンティティ結果を取得する場合は、またはのいずれgetSingleResultかを使用しgetOneOrNullResultます。

$repository
    ->createQueryBuilder('p')
    ->getQuery()
    ->getOneOrNullResult()
;

警告: これらのメソッドは潜在的に をスローする可能性がありNonUniqueResultExceptionます。

編集: OK、質問は部分オブジェクトに関するものでした:http://docs.doctrine-project.org/en/latest/reference/partial-objects.html

于 2012-05-07T12:31:49.907 に答える
19

「部分オブジェクト」を使用すると、配列の代わりにオブジェクトを取得できます。

以下は DoctrineORM 2.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
于 2012-08-20T20:14:31.633 に答える
4

getResult()メソッドは、エンティティのコレクション (配列) を返します。getSingleResult()オブジェクトを 1 つだけ取得する場合に使用します。

編集:

ああ、たった今、あなたが 1 つのオブジェクトの 1 つのフィールドを取得したいことに気付きました。getSingleScalarResult()@Florianが提案するように使用してください。

于 2012-05-07T12:31:48.840 に答える