Я ищу наиболее эффективный способ добавить результат подзапроса в виде столбца в ListMapper.
У меня есть метод хранилища, такой как:
public function getAdminQueryBuilder()
{
return $this->createQueryBuilder('city')
->select('city,
(SELECT COUNT(DISTINCT si.jobSeekerUser)
FROM App:City\JobTitle jt LEFT JOIN jt.submittedJobTitleInterests si
WHERE si.jobTitle = jt AND jt.city = c) AS cntInterestedUser
')
;
}
Так как вывидите, я хочу добавить новое скалярное значение "cntInterestedUser" в каждую строку вместе с обычными значениями из объекта City.
В классе администратора у меня есть:
public function createQuery($context = 'list')
{
$repository = $this->modelManager->getEntityManager($this->getClass())->getRepository($this->getClass());
$query = new ProxyQuery($repository->getAdminQueryBuilder());
foreach ($this->extensions as $extension) {
$extension->configureQuery($this, $query, $context);
}
return $query;
}
, а затемв методе listMapper у меня есть:
->add('cntInterestedUser')
Но при загрузке я получаю исключение:
"An exception has been thrown during the rendering of a template ("Warning: Illegal offset type in isset or empty")."
, которое указывает на строку 12 base_list_field.html.twig, котораяимеет:
<td class="sonata-ba-list-field sonata-ba-list-field-{{ field_description.type }}" objectId="{{ admin.id(object) }}"{% if field_description.options.row_align is defined %} style="text-align:{{ field_description.options.row_align }}"{% endif %}>
Я уже реализовал другие решения, такие как пользовательский метод в City, который зацикливает связанные коллекции и суммирует количество ... но это крайне неэффективно по отношению к разрешениючисло баз данных.
Я также реализовал прослушиватель событий PostLoad, который выполняет работу довольно эффективно, но при этом генерирует один дополнительный запрос на строку ... и также выполняет этот дополнительный запрос каждый раз, когда загружается Город ... гдеДействительно, я хочу получить это дополнительное значение только в контексте Sonata Admin.
Итак ... возможно ли вообще добавить пользовательский столбец с помощью подзапроса и сделать его доступным в объекте City и List Mapper?Я пропускаю шаг в правильном увлажнении "cntInterestedUser", чтобы сделать его доступным для listMapper?