Easyadmin field sotring faild with no association

65 views Asked by At

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?

0

There are 0 answers