У меня есть две таблицы. 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);
}
поэтому я пытаюсь передать идентификатор типа в цикле запросу, чтобы дать мне счет. этот код показывает только количество последнего типа в таблице.
Как именно вы сохраняете результат? Вы используете эту единственную переменную для всех типов?






Вы перезаписываете $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
}
Вы хотите общий счет?