Использование результата хранимой процедуры в качестве поля сущности доктрины - PullRequest
0 голосов
/ 19 декабря 2018

Я хочу заполнить поле в сущности результатом хранимой процедуры.Я использую последние версии Symfony и Doctrine (4.1 и 2.6 соответственно).База данных является сторонней, и я не могу изменить ее схему.Я также рассматриваю его содержимое как доступное только для чтения.

У меня есть сущность с около 50 полями / связями, все из которых заполнены аннотациями @Column и @ManyToOne;все они работают нормально, как и ожидалось.Есть заключительное поле, которое заполняется с помощью хранимой процедуры для извлечения «настраиваемого поля» из другой таблицы, используя имя настраиваемого поля, имя таблицы и первичный ключ строки (ID).В SQL:

dbo.GetCustomField('FieldName', 'TableName', TableName.Id)

Так что, если использовать SQL изначально, я мог бы извлечь это настраиваемое поле вместе со всеми «обычными» полями, выполнив что-то вроде:

SELECT
    *, 
    dbo.GetCustomField('FieldName', 'TableName', TableName.Id) AS FieldName
FROM
    TableName
[INNER JOIN ..., WHERE ..., etc.]

Я могуконечно, легко создать функцию репозитория, чтобы извлекать это для отдельной сущности или для набора результатов с определенным настраиваемым запросом - оба с использованием собственного SQL.

Я хочу иметь возможность обрабатывать это поле, как будто онобыли просто частью стола.В своей голове я представлял себе использование некоторой аннотации для вставки небольшого количества собственного SQL-запроса в запрос select независимо от каких-либо последующих предложений WHERE и т. Д.Тем не менее, кажется, что ничего не существует.

Я просмотрел документацию Doctrine Native SQL , рассматривая ResultSetMappings, но, похоже, он разрешает только определенные запросы / наборы результатов - даже тогда я не смог найтиспособ вставить необходимый аргумент id для хранимой процедуры.Точно так же я экспериментировал с EventListeners / Subscribeers, используя событие жизненного цикла PostLoad, но не смог заполнить поле таким образом, так как я мог найти способ заставить работать репозиторий или пользовательский SQL.

Я что-то упустил?Есть ли способ сделать это?Любой вклад приветствуется!

...