我有一些相关的实体,为了方便Product
和Category
. 它们是相关的 OneToMany 和 ManyToOne。(每个产品有一个类别,一个类别有很多产品)
我的目标是在模板中显示所有类别及其所有产品,但按字母顺序排列。例如像这样:
家具
- 床
- 沙发
- 电视
膳食
- 香蕉
- 鱼
- 柠檬
办公室
- 纸
- 笔
我希望对类别和产品进行排序。
所以:
方法一
使用教义编写查询以获取所有按名称 ASC 排序的类别,并按名称 ASC 获取所有产品,然后在模板中:
{% for c in all_categories %}
{{ c.name }}
{% for p in all_products %}
{% if p.category == c %}
{{ p.name }}
{% endif %}
{% endfor %}
{% endfor %}
方法二
仅获取类别,无论它们如何排序。将获取更改为渴望。然后将排序过滤器编写为 Twig Extension,如下所示:
public function sortByName($a, $b)
{
if($a->getName() === $b->getName()) {
return 0;
}
if($a->getName() < $b->getName()) {
return -1;
}
return 1;
}
并使用迭代器和uasort()
这个函数,然后在模板中:
{% for c in all_categories|sortbyname %}
{{ c.name }}
{% for p in c.products|sortbyname %}
{{ p.name }}
{% endfor %}
{% endfor %}
我可以看到,在1中,if 检查很糟糕,因为许多检查都是多余的。当我已经拥有所有类别时获得所有产品也是多余的。但我认为使用 Doctrine 进行排序应该比使用 twig 扩展更快。所以我不知道我应该使用哪一个。如果重要的话,就我而言,我有 3 个实体,如下所示:每个商店都有类别,每个类别都有产品。
你能帮我么?首先十分感谢!:)