存在以下实体:农场,谷仓和动物。农场可以有许多谷仓和谷仓很多动物。
在TWIG模板中显示Farm时,也应显示动物数量。
这样做的最佳方式是什么?
我创建了一个TWIG扩展程序,可以让我轻松显示数据库。
public function totalFieldFilter($data, $getField='getTotal') {
$total = count($data->$getField());
return $total;
}
在我的模板中,我会使用{{farm | totalField('getBarns')}},我可以轻松扩展它以编写另一个自定义函数,如下所示:
public function totalFieldFilter($farm) {
$total = 0;
foreach($farm->getBarns() AS $barn) {
$total += count($barn->getAniamls());
}
return $total;
}
虽然这样可行,但是有更好的方法可以使它更通用吗?如果我想算上动物的腿怎么办?或者谷仓有多少门,我每次都要写一个自定义的TWIG扩展名。
答案 0 :(得分:3)
使用实体访问者:
{% for farm in farms %}
{{ farm.name }}
{% set barns = farm.getBarns() %}
Barns count = {{ barns|length }}
{% for barn in barns %}
{% set animals = barn.getAnimals() %}
{{ barn.name }} animals count : {{ animals|length }}
{% endfor %}
{% endfor %}
答案 1 :(得分:2)
您正在寻找length filter
与数组一起使用时,length将为您提供项目数。因此,如果您的数组是farm.barns,则可以使用{{ farm.barns|length }}