0

私は2つのテーブルfooとその間barfoo_has_bar関連付けを持つ次のモデルを持っています:

ここに画像の説明を入力

foo.id特定の について、対応するすべてのを取得しようとしていますbar.id

これまでのところ、次のようfoo_has_barに特定のものに関連するすべてのエントリを取得できました。foo.id

$query = $em->createQuery("SELECT h FROM 'FooHasBar' h INNER JOIN h.foo f WHERE f.id = ?1");
$query->setParameter(1, $foo_id);
$results = $query->getArrayResult();

問題は、外部キーおよびではなく、 のフィールド$resultsのみが含まれているため、目的を達成できないことです。idfoo_has_barfoo_idbar_id

単一の DQL コマンドでfoo.id対応するすべてのを取得する特定の方法はありますか?bar.id

4

2 に答える 2

1

エンティティFooHasBarがそれぞれfooおよび との関係 および関係を持っていると仮定すると、クエリは非常に簡単です。barFooBar

$q = $em->createQuery(
    'SELECT 
        b.id as bar_id, f.id as foo_id 
    FROM FooHasBar fb 
    JOIN fb.bar b 
    JOIN fb.foo f 
    WHERE f.id = :fooId'
);
$q->setParameter( 'fooId', $foo->getId() );

$results = $query->getArrayResult();
于 2012-10-30T14:57:47.417 に答える
0

エンティティ間の関連付けが双方向の場合:

$q = $em->createQuery( 'SELECT b.id FROM Bar b JOIN b.fooHasBar x WHERE x.foo = :fooId' );
$q->setParameter( 'fooId', $foo->getId() );

$results = $query->getScalarResult();

エンティティ間の関連付けが一方向の場合 (これは Doctrine 2.3+ でのみ機能します):

$q = $em->createQuery( 'SELECT b.id FROM Bar b JOIN FooHasBar x WITH x.bar = b.id WHERE x.foo = :fooId' );
$q->setParameter( 'fooId', $foo->getId() );

$results = $query->getScalarResult();
于 2012-10-30T14:03:14.457 に答える