2016-03-03 82 views
3

我有一个'团队'实体与财产'预算'。我只想打印球队属性,我希望拥有最大预算的球队出现在第一名,第二名,第三名......(DESC)。Symfony/Doctrine - createQueryBuilder orderBy

但使用此代码,它不起作用,我不明白为什么。

的indexAction(控制器)

$em = $this->getDoctrine()->getManager(); 
    $teams = $em->getRepository('FootballBundle:Team')->getAllTeamsSortedByDescBudget(); 


    return $this->render('FootballBundle:Default:index.html.twig', array(
     'teams' => $teams, 
    )); 

TeamRepository

public function getAllTeamsSortedByDescBudget() 
{ 
    $q = $this->createQueryBuilder('a'); 
    $q->select()->from('FootballBundle:Team', 't')->orderBy('t.budget', 'DESC'); 

    return $q->getQuery()->getResult(); 
} 

树枝视图

<h1>Teams list</h1> 
<ul> 
    {% for team in teams %} 
     <li>{{ team.name }} - {{ team.championship }} - {{ team.budget|number_format(2, '.', ',') }}£</li> 
    {% endfor %} 
    <br/> 
</ul> 

Team.php实体

/** 
* @var integer 
* 
* @ORM\Column(name="budget", type="integer") 
*/ 
private $budget; 

这里,结果......

Teams list 

Manchester City FC - Premier League - 100,000,000.00£ 
Arsenal FC - Premier League - 50,000,000.00£ 
Leicester City - Premier League - 20,000,000.00£ 
Crystal Palace FC - Premier League - 5,000,000.00£ 
Chelsea FC - Premier League - 100,000,000.00£ 

切尔西...笑

编辑:更正!请参阅takeit评论。

+0

如何你'budget'属性和映射看起来像在实体? – takeit

+0

/** * @var整数 * * @ORM \ Column(name =“budget”,type =“integer”) */ private $ budget; – KitchenLee

+2

首先尝试:'public function getAllTeamsSortedByDescBudget() { $ q = $ this-> createQueryBuilder('t') - > orderBy('t.budget','DESC'); return $ q-> getQuery() - > getResult(); }' – takeit

回答

2

getAllTeamsSortedByDescBudget方法更改QueryBuilder查询:

public function getAllTeamsSortedByDescBudget() 
{ 
    $qb = $this->createQueryBuilder('t') 
     ->orderBy('t.budget', 'DESC'); 

    return $qb->getQuery()->getResult(); 
}