Php 如何使用Doctrine2-DQL通过关联表获取远程表ID

Php 如何使用Doctrine2-DQL通过关联表获取远程表ID,php,doctrine,doctrine-orm,foreign-keys,dql,Php,Doctrine,Doctrine Orm,Foreign Keys,Dql,我有以下模型,其中有两个表foo和bar,并且foo\u之间有bar关联: 对于给定的foo.id,我试图获取所有相应的bar.id 到目前为止,我已经能够从foo\u has\u bar检索到与特定foo.id相关的所有条目,如下所示: $query = $em->createQuery("SELECT h FROM 'FooHasBar' h INNER JOIN h.foo f WHERE f.id = ?1"); $query->setParameter

我有以下模型,其中有两个表
foo
bar
,并且
foo\u之间有bar
关联:

对于给定的
foo.id
,我试图获取所有相应的
bar.id

到目前为止,我已经能够从
foo\u has\u 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
只包含
foo\u has\u bar
id
字段,而不是外键
foo\u id
bar\u id
,因此我无法实现我想要的


给定一个特定的
foo.id
,是否有一种方法可以通过单个DQL命令检索所有相应的
bar.id

如果实体之间的关联是双向的:

$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();

如果实体之间的关联是单向的(这仅适用于原则2.3+):


假设实体
FooHasBar
分别与
foo
bar
有关系

$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();

谢谢,但他们都不适合我。第一个失败是因为
类栏没有名为fooHasBar的关联,我认为它是指
连接b.fooHasBar
,而第二个失败是因为在连接路径表达式中使用了
标识变量fooHasBar,但之前没有定义它,我认为它是指
连接fooHasBar x
。有什么办法让这一切顺利吗?@Jasper他没有多少人在那里建立起联系。。。顺便说一句,这个问题让人困惑。我假设有很多同一个/一个同一个关联,并且实体/属性的命名方式与表/列的命名方式相同(camelcased)@用户359650:也许您可以提供实体代码的(相关部分)?谢谢
Jasper
,但这不是必需的,因为我从
Ocramius
的答案中得到了我想要的。
$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();