I have a Site entity, and a Zone entity. Zones has a many to one relations to sites.
When I listing sites, I'd like to add a new column: Count of zones to show, how many zones related to a site. So, I've added this to Site entity:
public function getZonesCount(): int
{
return $this->zones->count();
}
In the crud controller, I've also added a new field:
public function configureFields(string $pageName): iterable
{
$fields = parent::configureFields($pageName);
$fields[] = NumberField::new('zones_count', 'Count of Zones')->setSortable(true);
return $fields;
}
It works great, the only problem is that, it is not sortable, because I am getting this error:
[Semantical Error] line 0, col 58 near 'zones_count ': Error: Class App\Entity\Site has no field or association named zones_count
of course, because it is not in the query.
So, based on the documentation, I've extended my queryBuilder:
public function createIndexQueryBuilder(
SearchDto $searchDto,
EntityDto $entityDto,
FieldCollection $fields,
FilterCollection $filters
): QueryBuilder {
$queryBuilder = parent::createIndexQueryBuilder($searchDto, $entityDto, $fields, $filters);
if (0 === count($searchDto->getSort())) {
$queryBuilder->innerJoin('entity.zones', 'z');
$queryBuilder->addSelect('COUNT(z.site) AS HIDDEN zones_count');
$queryBuilder->addGroupBy('entity.id, entity.name, entity.address');
$queryBuilder->addOrderBy('zones_count', 'DESC');
}
return $queryBuilder;
}
Query runs prefectly, I've checked. Getting the same error.
I've also tried to use AssociatedField, same error. I do not want to modify my Site entity, anyhow, getZonesCount should work here.
What could be the problem, what do I miss?