Конвертер не зарегистрирован для типа

Для того же случая у меня есть другая ошибка:

Нет конвертера, зарегистрированного для типа '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 имя отношения, как оно хранится в структуре, которая поставляется с моделью.

Другие вопросы по тегам