1

假设我有一个 Category 实体,一个 Person 实体,这两个实体通过 Contract Entity 相关联。
在我看来,我需要显示一个类别及其所有子类别以及人数

例如:当用户在页面上查看“A 类”时,我希望他/她看到:

Category A                  10 persons
  subcategory a.1            4 persons
  subcategory a.2            6 persons

所以在我的 show.html.twig 中,我会写:

{{ category.title }}  {{ nb_persons }}
{% for child in children %}
   {{ child.title }} //{{ child.getNbPersons() }}??, how to get the number of persons for each child ?
{% endfor %}

这是我的 CategoryController.php

public function showAction($id_category)
{
    $em=$this->getDoctrine()->getEntityManager();
    $repo = $em->getRepository('MyBundle:Category');
    $this->param['category']= $repo->find($id);
    $this->param['nb_persons'] = $repo->getNbPersonsByCategory($id_category);
    $this->param['children'] = $repo->children($this->param['category'], true, 'title');

return $this->render('MyBundle:Category:show.html.twig', $this->param);
}

但是要显示每个子类别(孩子)的人数,我需要使用 child.getNbPersons() 之类的方法,但这会迫使我在实体 Category.php 中使用存储库函数,我认为这是一个不好的做法. 我能做些什么 ?

4

1 回答 1

1

我倾向于将模型与其他一切完全隔离。也就是说,模型不知道控制器、存储库等。

关于您的问题,我宁愿array在控制器中构造一个适当的对象(以及一个)并将其传递给Twig它,它array应该包含预先计算所需的所有信息。这样,如果您有很多类别(和/或子类别),您只需执行一次数据库查询,而不是从模型方法调用存储库,每次调用都需要一个查询。

希望这可以帮助... ;)

于 2012-10-19T17:47:05.580 回答