我在Twig中创建了一个方法,它将计算并显示表格中的结果。但我想根据结果列对表格进行排序
{% for island in islands %}
<tr>
<td>{{ island.id }}</td>
<td>{{ island.name }}</td>
<td>{{ number_votes(island.id) }}</td>
</tr>
{% endfor %}
结果
id name result
1 name1 3000
2 name2 100
3 name3 5000
4 name4 90
正如您所看到的,它默认根据其id排序。如何根据其结果列进行排序?
我的枝条过滤器
public function getFunctions()
{
return array(
new \Twig_SimpleFunction('number_votes', array($this, 'a'))
);
}
public function getName()
{
return 'app.extension';
}
public function a($id)
{
$qb=$this->em->createQueryBuilder();
$qb->select('count(v.id)')
->from('Bundle:Voters','v')
->join('v.city','c')
->join('c.province','p')
->join('p.region','r')
->join('r.island','i')
->where('i.id = :x')
->setParameter('x',$id);
$count = $qb->getQuery()->getSingleScalarResult();
return $count;
//I tried return sort($count)//not working
}
我也试过
{{ number_votes(island.id)|sort }}/throws an error
我担心我必须创建另一个Twig过滤器,有什么方法可以防止这种情况吗?
答案 0 :(得分:1)
您可以完全避免使用树枝过滤器并执行此类操作,以便在一个结果集中使用您的岛屿和投票计数:
$islandsAndVotes = $qb->select('i, count(v.id) as vote_count')
->from('Bundle:Voters','v')
->join('v.city','c')
->join('c.province','p')
->join('p.region','r')
->join('r.island','i')
->groupBy('i')
->orderBy('vote_count', 'DESC')
->getQuery()
->getResult()
;
$ islandsAndVotes的每个元素将包含索引为0的Island实体和索引为1的投票计数
E.g。
foreach ($islandsAndVotes as $islandVote) {
$island = array_shift($islandVote);
$votecount = array_shift($islandVote);
}
在树枝上你可以使用first&amp;当您迭代结果时,last分别访问岛屿或投票计数。
{% for islandVote in islandsAndVotes %}
{% set island = islandVotes|first %}
{% set voteCount = islandVotes|last %}
<tr>
<td>{{ island.id }}</td>
<td>{{ island.name }}</td>
<td>{{ voteCount }}</td>
</tr>
{% endfor %}