2017-07-04 15 views
1

私はこのクエリをdoctrine querybuilderで作成しました。戻り値は配列の配列です。 オブジェクトの配列であるリターンを取得したいと思いますが、これは可能ですか?Doctrine queryBuilder:配列がない配列を返します

Doctrineは通常、エンティティのオブジェクトを返します。なぜなら、私は別のテーブルから名前を取得するために内部結合を持っているからです。配列を返します。

ありがとうございます。

return $qb->getQuery()->getResult(Query::HYDRATE_ARRAY); 

またはこの:あなたはあなたがオブジェクトの配列をしたい場合は

return $qb->getQuery()->getArrayResult(); 

答えて

1

これは、この方法では不可能である($トーナメントを招待します)。言い換えれば、それは間違っている。

Doctrineに、エンティティと文字列を含むコレクションを返すように指示しているので、これがあなたのものです。 Doctrineは、そのような結果をどのように水和するかを知らないので、それからオブジェクトを作成しません。

​​

あなただけのオブジェクトのコレクションを受け取りたい場合、あなたはそれを水和するResultSet mappingを使用し、その後、両方のフィールド(関連エンティティと文字列プロパティ)を持つ新しいエンティティを作成する必要があります。

3

する必要があるエンティティ間のリレーションを設定し、リレーションの所有側でクエリを作成します。

例:

Tourney entity , Invite entity 

Invite 
    /** 
    * @ORM\ManyToOne(targetEntity="Tourney", inversedBy="invites") 
    */ 
    protected $tourneys; 

Tourney 
    /** 

    * @ORM\OneToMany(targetEntity="Invite", mappedBy="tourneys", cascade={"persist", "remove"}) 
    * @ORM\JoinColumn(nullable=true, onDelete="CASCADE") 
    */ 
    protected $invites; 

今あなたが (招待)関係の所有側に問い合わせを行う必要があり、すべてあなたのフィールド$にトーナメントでオブジェクトデータを結合するには

を招き開催しますそれはあなたにオブジェクトの配列を与えます。セッター$のクエリに基づいて

思い出してくれるがsetInvites(トーナメント$が招待)として招き、関係setTourneysの逆側で

0

だけgetResult()

このような
$qb->select('u', 'h.name') 
    ->from('AppBundle:UserHose', 'u') 
    ->innerJoin('AppBundle:Hose', 'h', 'WITH', 'u.hoseId = h.id') 
    ->where('u.userId = :userId') 
    ->orderBy('u.id', 'DESC') 
    ->setParameter('userId', $userId); 

return $qb->getQuery()->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY); 
+1

もう少し近い質問をお読みになりたいかもしれません。何らかの理由で彼はすでに配列結果を得ています。彼はオブジェクトの配列を必要とします。 – Cerad

0

\Doctrine\ORM\Query::HYDRATE_ARRAYを追加するには、これを使用することができます

$qb->select('u', 'h.name') 
     ->from('AppBundle:UserHose', 'u') 
     ->innerJoin('AppBundle:Hose', 'h', 'WITH', 'u.hoseId = h.id') 
     ->where('u.userId = :userId') 
     ->orderBy('u.id', 'DESC') 
      ->setParameter('userId', $userId); 


    return $qb->getQuery()->getResult(); 
関連する問題