我有两个表。1-属性2型。每个属性都有类型。在我的过滤器表格中,我想在复选框中显示类型,以及在某种类型的属性的数量之外。
这是我在我的存储库中的查询:
public function countByType($type){
return $this->createQueryBuilder('p')
->select('count(p.id)')
->where('p.type = :type')
->setParameter('type', $type)
->getQuery()
->execute();
}
我的控制器中的代码:
$typeID = $this->getDoctrine()->getRepository(Type::class)->findAll();
foreach ($typeID as $tID){
$propertyCountByType = $this->getDoctrine()->getRepository(Property::class)->countByType($tID);
}
所以我要做的就是将循环中的类型ID传递给查询以给我计数。此代码仅显示表中的最后一个类型的计数。
您在每次迭代时都覆盖$propertyCountByType
,这就是为什么您仅获得最后一个值。
如果要存储每个计数单独存储,则可以将值存储在数组
中$typeID = $this->getDoctrine()->getRepository(Type::class)->findAll();
$propertyCountByType = array();
foreach ($typeID as $tID) {
$propertyCountByType[] = $this->getDoctrine()->getRepository(Property::class)->countByType($tID);
// ^------------ add the current result to the array
}
该数组可以在$tID
上以这种方式索引:
$propertyCountByType[$tID] = $this->getDoctrine()->getRepository(Property::class)->countByType($tID);
或更好的是,在单个查询中使用
的组public function countByType(){
return $this->createQueryBuilder('p')
->select('count(p.id) AS CountByType', 'p.type AS type') // each row will contain the count and the type
->groupBy('p.type')
->getQuery()
->getArrayResult(); // get the result as array
}