我有一个文章模型和一个照片模型,我目前正在使用这样的查询加入这两个:
$q = Doctrine_Query::create()
->from('Article a')
->leftJoin('a.Photo p');
为了将它们绑定在一起,我有一个ArticlePhoto
模型。除article_id
和photo_id
字段外,该模型还有一个priority INT
字段,我想在上面的查询中对照片进行排序。
任何建议如何实现这一点,而无需通过这样的查询加入:
$q = Doctrine_Query::create()
->from('Article a')
->leftJoin('a.ArticlePhoto ap')
->leftJoin('ap.Photo p')
->orderBy('ap.priority');
有很多代码希望在$article['Photo'][0]
中找到该文章的第一张照片,所以我希望避免更改此内容。谢谢你的任何建议!
答案 0 :(得分:1)
连接有什么问题?您始终可以将查询重写为:
$q = Doctrine_Query::create()
->from('Article a')
->leftJoin('a.ArticlePhoto ap, ap.Photo p')
->orderBy('ap.priority');
这看起来像一个没有任何魔法的完美的查询。您需要来自ArticlePhoto表的信息(用于排序),因此进行显式连接是正确的。
答案 1 :(得分:0)
$q = Doctrine_Query::create()
->from('Photo p')
->orderBy('priority');
以上就可以了。请注意,不需要连接具有关系的表(假设在您的示例中,表在模式中具有1:m关系)。您可以按照下面的说明对文章对象进行修改
$photoObjectCollection=$q->execute();
foreach($photoObjectCollection as $photoObject){
$photoObject->Article->requiredField;
}