Конвертер не зарегистрирован для типа
Для того же случая у меня есть другая ошибка:
Нет конвертера, зарегистрированного для типа 'public.group',
У меня есть таблицы user, group и user_group.
$sql = <<<SQL
SELECT :projection
FROM "user"
LEFT JOIN user_group ON "user".id=user_group.user_id
LEFT JOIN "group" ON "group".id=user_group.group_id
WHERE "user".id = $*
GROUP BY "user".id
SQL;
$projection = $this->createProjection()
->setField('groups', 'array_agg("group") AS groups', 'public.group[]')
;
$sql = strtr($sql, [':projection' => (string) $projection->formatFields('"user"')]);
return $this->query($sql, [1], $projection);
В services.yaml:
App\Infrastructure\Model\MyDB\PublicSchema\GroupModel:
tags: [pomm.model]
App\Infrastructure\Model\MyDB\PublicSchema\UserGroupModel:
tags: [pomm.model]
App\Infrastructure\Model\MyDB\PublicSchema\UserModel:
tags: [pomm.model]
1 ответ
Решение
Чтобы избежать необходимости регистрировать конвертер для каждой таблицы базы данных, конвертеры загружаются при загрузке классов моделей таблиц.
Добавление следующей строки в начале вашего метода должно решить вашу проблему:
$groupModel = $this->getSession()->getModel(GroupModel::class);
Это также дает вам возможность не иметь дело с group
имя отношения, как оно хранится в структуре, которая поставляется с моделью.