sf_*_*anb 1 php doctrine symfony1 doctrine-1.2
在动作中使用symfony && doctrine 1.2,我尝试为用户显示排名靠前的网站.
我做了:
public function executeShow(sfWebRequest $request)
{
$this->user = $this->getRoute()->getObject();
$this->websites = $this->user->Websites;
}
Run Code Online (Sandbox Code Playgroud)
唯一的问题是它返回一个包含所有网站的Doctrine集合,而不仅仅是排名靠前的网站.
我已经设置了一个方法(getTopRanked()),但如果我这样做:
$this->user->Websites->getTopRanked()
Run Code Online (Sandbox Code Playgroud)
它失败.
如果有人有想法改变Doctrine集合,只过滤排名最高的.
谢谢
PS:我的方法看起来像(在websiteTable.class.php中):
public function getTopRanked()
{
$q = Doctrine_Query::create()
->from('Website')
->orderBy('nb_votes DESC')
->limit(5);
return $q->execute();
}
Run Code Online (Sandbox Code Playgroud)
我宁愿在方法之间传递Doctrine_Query:
//action
public function executeShow(sfWebRequest $request)
{
$this->user = $this->getRoute()->getObject();
$this->websites = $this->getUser()->getWebsites(true);
}
//user
public function getWebsites($top_ranked = false)
{
$q = Doctrine_Query::create()
->from('Website w')
->where('w.user_id = ?', $this->getId());
if ($top_ranked)
{
$q = Doctrine::getTable('Website')->addTopRankedQuery($q);
}
return $q->execute();
}
//WebsiteTable
public function addTopRankedQuery(Doctrine_Query $q)
{
$alias = $q->getRootAlias();
$q->orderBy($alias'.nb_votes DESC')
->limit(5)
return $q
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4149 次 |
| 最近记录: |