Я использую Sonata Admin, чтобы показать список участников с количеством предложений в отношениях OneToMany. Проблема с сортировкой по количеству предложений. Я не вижу в документации Sonata Admin способа сделать это. Некоторые ответы на подобные вопросы не работают.
/**
* @ORM\Entity(repositoryClass="App\Repository\ClientRepository")
*/
class Member
{
/**
* @var int
*
* @ORM\Id()
* @ORM\GeneratedValue(strategy="IDENTITY")
* @ORM\Column(type="integer")
*/
private $id;
/**
* @var string
*
* @ORM\Column(type="text", nullable=false)
*/
private $name;
/**
* @ORM\OneToMany(targetEntity="Offer", mappedBy="member")
*/
private $offers;
public function getOffersCount(): int
{
return $this->offers->count();
}
}
/**
* @ORM\Entity(repositoryClass="App\Repository\OfferRepository")
*/
class Offer
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @var Collection
*
* @ORM\ManyToOne(targetEntity="Member", inversedBy="offers", cascade={"persist"})
*/
private $member;
}
// MemberAdmin.php
protected function configureQuery(ProxyQueryInterface $query): ProxyQueryInterface
{
$query = parent::configureQuery($query);
$parameters = $this->getFilterParameters();
if ('offersCount' === $parameters['_sort_by']) {
$rootAlias = $query->getRootAliases()[0];
$query
->addSelect('COUNT(o.id) as HIDDEN v_id_count')
->leftJoin($rootAlias.'.offers', 'of')
->groupBy($rootAlias.'.id')
->orderBy('v_id_count', $parameters['_sort_order']);
}
return $query;
}
protected function configureListFields(ListMapper $listMapper)
{
$listMapper->addIdentifier('name', null, [
'label' => 'Name',
'sortable' => true
]);
$listMapper->add('offersCount', IntegerType::class, [
'sort_field_mapping' => ['fieldName' => 'id'],
'mapped' => false,
'sortable' => true,
'sort_parent_association_mappings' => [],
]);
}
С данным кодом у меня возникает ошибка, когда я нажимаю на стрелку сортировки в списке:
Исключение было выдано во время рендеринга шаблон ("[Семантическая ошибка] строка 0, столбец 101 рядом с 'v_id_count A': ошибка: 'v_id_count' не определено.").
Соната была выполнена этим sql:
ВЫБЕРИТЕ DISTINCT o.id ИЗ ПРИЛОЖЕНИЯ \ Entity \ Client o СЛЕДУЮЩЕЕ СОЕДИНЕНИЕ o.offer of GROUP BY o.id ЗАКАЗАТЬ o.id AS C, v_id_count AS C
Что я должен изменить, чтобы сортировка работала?