0

我有一个 Article 模型和一个 Photo 模型,我目前正在使用这样的查询来加入这两者:

$q = Doctrine_Query::create()
       ->from('Article a')
       ->leftJoin('a.Photo p');

为了将它们绑定在一起,我有一个ArticlePhoto模型。除了article_idphoto_id字段,模型还有一个priority INT字段,我想用它对上述查询中的照片进行排序。

任何建议我可以如何实现这一点,而不必通过这样的查询加入:

$q = Doctrine_Query::create()
       ->from('Article a')
       ->leftJoin('a.ArticlePhoto ap')
       ->leftJoin('ap.Photo p')
       ->orderBy('ap.priority');

有很多代码希望在 中找到文章的第一张照片$article['Photo'][0],所以我想避免不得不更改它。感谢您的任何建议!

4

2 回答 2

1

连接有什么问题?您始终可以将查询重写为:

$q = Doctrine_Query::create()
   ->from('Article a')
   ->leftJoin('a.ArticlePhoto ap, ap.Photo p')
   ->orderBy('ap.priority');

这看起来像是一个没有任何魔法的完美查询。您需要来自 ArticlePhoto 表的信息(用于排序),因此进行显式连接是正确的做法。

于 2012-04-19T14:15:16.487 回答
0
$q = Doctrine_Query::create()
   ->from('Photo p')
   ->orderBy('priority');

以上将解决问题。请注意,不需要连接具有关系的表(假设在您的示例中,表在模式中具有 1:m 关系)。您可以按如下所述获得文章对象

$photoObjectCollection=$q->execute();
foreach($photoObjectCollection as $photoObject){
    $photoObject->Article->requiredField;
}
于 2012-04-18T11:50:40.057 回答