2017-02-16 5 views
0
$posts = $qb 
    ->select('p') 
    ->from('MyBundle\Entity\Post', 'p') 
    ->getQuery() 
    ->getArrayResult(); 

クエリは次のようなもの(99列)結果が配列として水和されたときにDoctrine 2 Query Builderを使用して外部キーを取り出す方法は?上記

id | title | url     | .... many columns here ..... | created_at 
---|--------------------------------|-------------------------------|-------------------- 
1 | hello | http://www.google.com/ | | - | - | - | - | - | - | 2017-01-01 00:00:00 
2 | world | http://www.yahoo.com/ | | - | - | - | - | - | - | 2017-01-01 00:00:00 

を戻しますが、このテーブルは、テーブル「ユーザー」を意味FK(USER_ID)を有しています。問題はこれです:クエリはFK列をクエリ結果に持ってこない。私はテストし、結果が配列(getArrayResult)として水和されると、FKの結果を無視します。結果がオブジェクト(getResult)として水和されると、FKの結果が返されます。さて、私はこの便利なポスト(http://shout.setfive.com/2015/01/31/including-foreign-keys-in-doctrine2-array-results/)を読んで、ショー以下のコードのように(これは適切な方法であれば、わからないけど作品で)FKを取得する方法

$posts = $qb 
    ->select('p') 
    ->from('MyBundle\Entity\Post', 'p') 
    ->getQuery() 
    ->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true) 
    ->getArrayResult(); 

はいえ、私は別の問題に直面する考え出しましたそれは私がこれまで解決できなかったものです。私が言ったように、このテーブルには+ 99列があります。しかし、私はそれらのすべてを望んでいません。 私がしたいのは+99のうち3つだけです。私は(テーブル、ユーザー、列IDに参照のうえ)FKを意味選択の「p.user」を、追加するまで適切になるまで作業以下のコード...

$posts = $qb 
    ->select(array('p.id', 'p.url')) 
    ->from('MyBundle\Entity\Post', 'p') 
    ->getQuery() 
    ->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true) 
    ->getArrayResult(); 

...。

私は何を得るのです
$posts = $qb 
    ->select(array('p.id', 'p.url', 'p.user')) 
    ->from('MyBundle\Entity\Post', 'p') 
    ->getQuery() 
    ->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true) 
    ->getArrayResult(); 

[Doctrine\ORM\Query\QueryException]                            
[Semantical Error] line 0, col 10 near 'user FROM MyBundle\Entity\Post': Error: Invalid PathExpression. Must be a StateFieldPathExpression. 

答えて

1

これはあなたの識別子/外部キーを返します

->select(array('p.id', 'p.name', IDENTITY(p.user)) 

のようなものを試してみてくださいユーザー。 select(array())という表記を使ったことがないので、私の例はそのままではうまくいかないかもしれません。しかしIDENTITY(entity.association)はあなたが探しているものです。

+0

非常にうまくいった!感謝します! –

0

ここでは、次のとおりです。

$posts = $qb 
    ->select(array('p.id', 'p.url', 'u.id')) // u.id is your user id, change if your user id is different 
    ->from('MyBundle\Entity\Post', 'p') 
    ->leftJoin('MyBundle\Entity\User', 'u') 
    ->getQuery() 
    ->getArrayResult() 
; 
+0

uhmmええ、それは動作しますが、FKはすでにメインテーブルにあるので、不要な結合を作成する必要があります。 10個のFKがあるとどうなりますか?私はすでに私のメインテーブルにすべての10の異なるテーブルに参加する必要がありますか? –

関連する問題