8

可能な値を少なくしてクエリを絞り込もうとしています。たとえば、名前、住所、都市などを含むエンティティ「Anagrafic」と、1つだけを変更したいフォームがあります。アドレスなどのこれらのフィールド。私はこのクエリを作成しました:

//AnagraficRepository
public function findAddress($Id)
{
     $qb = $this->createQueryBuilder('r')
             ->select('r.address')
             ->where('r.id = :id')
             ->setParameter('id', $Id)
             ->getQuery();

     return $qb->getResult();
}

値を返さないため、このクエリに問題がありますが、通常どおりクエリを実行すると、次のようになります。

//Controller
$entity = $em->getRepository('MyBusinessBundle:Anagrafic')->find($id);

正しい値を返します。1つの列のみを選択してクエリを実行するにはどうすればよいですか?

4

4 に答える 4

16

各レコードの単一の列を要求しているので、を期待する必要がありarrayます。オブジェクトの水和を強制できないため、getResult置き換える必要があると言われています。getArrayResult()

$data = $qb->getArrayResult();
Now, you have structure:
    $data[0]['address']
    $data[1]['address']
    ....

お役に立てれば。

コメントでのパフォーマンスに関する議論については、30列すべてを毎回フェッチしたくないという点で一般的に同意します。ただし、その場合は、データベースが変更された場合の影響を最小限に抑えるために、名前付きクエリの作成を検討する必要があります。

于 2013-02-24T00:56:03.080 に答える
8

部分オブジェクトを使用して、1つのフィールドのみをハイドレイトし、それでもオブジェクトを返すことができます。

于 2013-02-24T01:11:25.180 に答える
3

これは私のために働いた:

  $qb = $repository->createQueryBuilder('i')
    ->select('i.name')
    ->...
于 2014-10-10T11:05:52.653 に答える
2

このような部分的なオブジェクトを使用してフィールドを選択します

$qb = $this->createQueryBuilder('r')
    ->select(array('partial r.{id,address}'))
    ...

フィールド名を角かっこで囲みます

于 2014-10-07T16:34:40.477 に答える