【发布时间】:2011-06-05 22:17:41
【问题描述】:
在一个动作中使用 symfony && 学说 1.2,我尝试为用户显示排名最高的网站。
我做到了:
public function executeShow(sfWebRequest $request)
{
$this->user = $this->getRoute()->getObject();
$this->websites = $this->user->Websites;
}
唯一的问题是它返回一个包含所有网站的 Doctrine 集合,而不仅仅是排名靠前的网站。
我已经设置了一个方法 (getTopRanked()) 但如果我这样做了:
$this->user->Websites->getTopRanked()
失败了。
如果有人想改变 Doctrine 集合以仅过滤排名靠前的。
谢谢
PS:我的方法看起来像(在 websiteTable.class.php 中):
public function getTopRanked()
{
$q = Doctrine_Query::create()
->from('Website')
->orderBy('nb_votes DESC')
->limit(5);
return $q->execute();
}
【问题讨论】:
-
你把
getTopRanked()放在哪里了,看起来怎么样? -
查看我的编辑,我已添加该功能。 :-)
-
您正在读取所有网站的值,而不是属于某个用户的所有网站。尽管您从用户对象中调用它,但您的查询不使用用户值...我认为 Doctrine 不会自行添加所需的 JOIN。
-
$this->user->x() 方法是您的用户模型中的方法。您将此功能放在您的 websiteTable 模型中,这是完全不同的。您应该在接受用户 ID 的网站模型中创建一个函数(例如 toprankedbyuser($user) ),或者,如果您想像上面那样访问它,请在用户模型中创建一个函数。
标签: php symfony1 doctrine doctrine-1.2