2010-07-24 64 views
1

在我的申请,我经常做的教义这样的查询:水合物学说收集与其他模型比FROM子句

$coms = Doctrine_Core::getTable('Comment') 
->createQuery('c') 
->join('c.article a') 
->join('a.Writter w') 
->where('w.something = ?', $something); 

我想在writter的条件来提取文章的评论。 Le查询从评论表开始(因为最后,我们想要一个评论的学说集合),接下来我加入所有文章,然后加入所有的作者。最后,我对作者的条件进行了限制。

该查询可以与在此顺序的接缝更加优化:

$coms = Doctrine_Core::getTable('Writter') 
->createQuery('w') 
->select('c.*') 
->join('w.Article a') 
->join('a.Comments c') 
->where('w.something= ?', $something); 

像这样,通过关节操纵线的数目是更降低,因为在writter限制在制成。第一。

但是与此代码,我得到一个错误:

的根类的查询(别名w)为必须具有至少一个字段选择。

的解决方案确实存在把这个顺序关节和最终获得评论的学说收藏?

+0

在你的第二个查询,什么是“R”? “W”和“r”,“c”或“a”之间没有关系。 – nacmartin 2010-07-25 14:53:32

+0

我已纠正此问题。 W(ritter)= R(edacteur)用法语。 - 一位作家写了很多文章。 - 一篇文章包含很多评论。 – Julien 2010-07-25 15:30:27

回答

0

不,没有其他解决方案,而不是保持您的第一个查询。您始终使用getTable('xyz')获取您选择的根类的对象的集合。这是没有办法的。

1

你应该简单地将连接表的选择(如学说告诉你错误消息BTW):

->select('c.*, w.*')