链接一对多关系的学说查询

时间:2010-08-04 16:04:47

标签: php doctrine orm

我有三张桌子A,B,C。A和B有一对多的关系。 B和C有另一个一对多的关系。换句话说,每个A可以有多个B,而每个B可以有多个C。

现在我想对A的给定记录进行查询,以获得具有相关C的所有相关B。换句话说,对于给定的a,即表A中的记录,我想从表B中获得所有相关的B,假设每个B在表C中也具有多于零的相关C。

如何在PHP学说中编写语句?我有一些代码不起作用:

Doctrine_Query :: create() - > from('B b') - > leftJoin('C c')              - > andWhere('b.A_id =?',a.id) - > andWhere('c.b_id = b.id');

3 个答案:

答案 0 :(得分:0)

从我与Doctrine的工作中,这是不可能的(我说的是教义1)。

我知道很糟糕的工作是做多个查询。 IE获取所有B id并在whereIN子句中使用它们并在单独的查询中将它们拉出来。如果其他人有更好的方法我会对它感兴趣:)

答案 1 :(得分:0)

正如前言所述,您需要编写至少2个查询。我也会按照他建议的方式(取所有B id并使用IN)。

要使其更具主义,请查看DQL Subqueries。他们已经展示了一个使用IN与选择ID相关的示例。

编辑:阅读DuoSRX的答案,我想你可能已经意味着他在内部联接中表现出来但不太确定我是否理解这个问题是正确的。

答案 2 :(得分:0)

为什么不直接使用内部连接?使用Foo,Bar和Baz(分别为A,B和C):

Doctrine_Query::create()
->from('Bar bar')
->where('bar.foo_id = ?', $foo->id)
->innerJoin('bar.Baz baz');

这样你只会得到属于Foo的Bar,它有一个或多个Baz。