在Doctrine 1.2中,如何以多对多关系访问粘合对象属性?

时间:2012-04-16 13:49:21

标签: symfony1 doctrine symfony-1.4 doctrine-1.2

我有一个文章模型和一个照片模型,我目前正在使用这样的查询加入这两个:

$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]中找到该文章的第一张照片,所以我希望避免更改此内容。谢谢你的任何建议!

2 个答案:

答案 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;
}