Php 获取细枝(或控制器)中每个记录的相关实体编号
我有一节人民课和一节团体课。通过“群体”字段,我知道每个人都属于哪个群体,但我不知道群体中有哪些人。为此,我必须通过查询people表来查找组中的所有人员 以下是我课程的相关部分:Php 获取细枝(或控制器)中每个记录的相关实体编号,php,symfony,templates,doctrine,twig,Php,Symfony,Templates,Doctrine,Twig,我有一节人民课和一节团体课。通过“群体”字段,我知道每个人都属于哪个群体,但我不知道群体中有哪些人。为此,我必须通过查询people表来查找组中的所有人员 以下是我课程的相关部分: class People { /** * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") * @ORM\Column(name="id",type="integer") */ protected $id;
class People
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(name="id",type="integer")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Bundle\Entity\Groups")
* @ORM\JoinColumn(referencedColumnName="id")
*/
protected $group;
.....
这是我小组课的一部分
class Group
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
...
我想做的是计算每个组中有多少人,然后在一个小树枝模板中传递,如下所示:
{% for group in allGroups %}
<li>name: {{group.name}} </li>
<li>date:{{ group.createdAt|date('d-m-Y H:i:s') }}</li>
<li>Number of people: {{ group.peopleNo}}</li>
<hr>
{% endfor %}
我不确定如何在twig中循环显示每个组的编号,因为它是按从0开始的顺序索引的,而不是按组id索引的。我认为如果一个组没有人就可以了,如果找不到记录,我就说它有0人。信息是正确的,我有两个组,一个有1人,另一个有3人,但他们的id是1和2,而不是0和1
下面是我的树枝的样子,foreach中的foreach看起来像是坏习惯:
{% for group in groups %}
<li> {{ group .name|e }}</li>
<li>{{ group .createdAt|date('d-m-Y H:i:s') }}</li>
<li>
{% for key, ppno in peopleno %}
{% if ppno [key] is defined %}
{% if ppno [key]['id']==ticket.id %}
people: {{ peopleno [key]['total_peoples'] }}
{% endif %}
{% else %}
people:0
{% endif %}
{% endfor %}
</li>
<hr>
{% endfor %}
{%用于组中的组%}
{{group.name | e}}
{{group.createdAt|date('d-m-Y H:i:s')}
{%用于密钥,peopleno%中的ppno}
{%如果定义了ppno[key]%}
{%if-ppno[key]['id']==ticket.id%}
人民:{{peopleno[key]['total_peoples']}
{%endif%}
{%else%}
人口:0
{%endif%}
{%endfor%}
{%endfor%}
在实体之间创建关联,然后在twig中可以访问每个组的人员
use Doctrine\Common\Collections\ArrayCollection;
class Group
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
...
/**
* @ORM\OneToMany(targetEntity="People", mappedBy="group")
**/
private $peoples;
// ...
public function __construct() {
$this->peoples = new ArrayCollection();
}
}
{% for group in allGroups %}
<li>name: {{group.name}} </li>
<li>date:{{ group.createdAt|date('d-m-Y H:i:s') }}</li>
<li>Number of people: {{ group.peoples|length }}</li>
<hr>
{% endfor %}
在twig中,您可以使用函数获取每个组的人数
use Doctrine\Common\Collections\ArrayCollection;
class Group
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
...
/**
* @ORM\OneToMany(targetEntity="People", mappedBy="group")
**/
private $peoples;
// ...
public function __construct() {
$this->peoples = new ArrayCollection();
}
}
{% for group in allGroups %}
<li>name: {{group.name}} </li>
<li>date:{{ group.createdAt|date('d-m-Y H:i:s') }}</li>
<li>Number of people: {{ group.peoples|length }}</li>
<hr>
{% endfor %}
在twig中,您可以循环查看结果,并使用total\u peoples
index显示计数
注意:这不会返回没有任何关联用户的组
表示计数为0的组将不会返回,因为它是内部组
加入,您需要的是正确地加入到组实体,不幸的是,它不是
可能在dql中有一个正确的联接
要实现正确的连接并坚持条令关联,您必须实施没有其他方法不修改实体吗?请这样做,我无法真正修改实体。我添加了我在文章末尾得到的结构。我不确定如何在twig中循环显示每个组的编号,因为它是按从0开始的顺序索引的,而不是按组id索引的。我认为如果一个组没有人就可以了,那么我就说它有0人。@georgeirimicuc使用我的current查询我猜你在上次更新之前复制了这个数组,应该给你一个包含所有行的数组。不,是这个数组,我只是删除了g.name,g.createdAt,然后放上g.id。格式还是一样的。