0

我有以下模型,其中包含 2 个表foo以及它们之间barfoo_has_bar关联:

在此处输入图像描述

对于给定的,我试图获得foo.id所有相应bar.id的 's。

到目前为止,我已经能够检索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它只包含id字段foo_has_bar,而不是外键foo_idbar_id,因此我无法实现我想要的。

有没有办法,给定一个特定的用单个 DQL 命令foo.id检索所有相应的 's?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 回答