Symfony1 在原则1.2中,如何访问多对多关系中的粘合对象属性?

Symfony1 在原则1.2中,如何访问多对多关系中的粘合对象属性?,symfony1,doctrine,symfony-1.4,doctrine-1.2,Symfony1,Doctrine,Symfony 1.4,Doctrine 1.2,我有一个文章模型和一个照片模型,我目前正在使用这样一个查询来连接这两个模型: $q = Doctrine_Query::create() ->from('Article a') ->leftJoin('a.Photo p'); 为了将它们绑定在一起,我有一个ArticlePhoto模型。除了article\u id和photo\u id字段外,该模型还有一个priority INT字段,我想用它对上述查询中的照片进行排序 我如何实现这一点的任何建议,而不

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

$q = Doctrine_Query::create()
       ->from('Article a')
       ->leftJoin('a.Photo p');
为了将它们绑定在一起,我有一个
ArticlePhoto
模型。除了
article\u id
photo\u id
字段外,该模型还有一个
priority INT
字段,我想用它对上述查询中的照片进行排序

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

$q = Doctrine_Query::create()
       ->from('Article a')
       ->leftJoin('a.ArticlePhoto ap')
       ->leftJoin('ap.Photo p')
       ->orderBy('ap.priority');
有很多代码希望在
$article['photo'][0]
中找到文章的第一张照片,因此我不想改变这一点。谢谢你的建议

$q = Doctrine_Query::create()
   ->from('Photo p')
   ->orderBy('priority');
上面的方法就可以了。请知道,不需要连接具有关系的表(假设在您的示例中,表在模式中具有1:m关系)。您可以访问下面所述的article对象

$photoObjectCollection=$q->execute();
foreach($photoObjectCollection as $photoObject){
    $photoObject->Article->requiredField;
}

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

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

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

优先级
ArticlePhoto
中的字段,而不是
照片
中的字段。我不认为你的查询能起作用。如果我只是简单地使用$photoObject->Article->requiredField,那么每次访问Article字段时,它似乎都会使用另一个DB查询。我宁愿用同一个查询请求所有需要的数据。谢谢,很抱歉延迟响应:)我按照你的建议做了。