lamo4ok
@lamo4ok
Программист

Doctrine: как указать, что в БД тип поля не тот, что в сущности?

Есть сущность, которую мы можем читать из нескольких хранилищ. Одно из них - Doctrine. Поле id в сущности имеет тип строки, однако в БД это поле объявлено как целое число. Каким образом я могу указать в xml-конфиге маппинга, либо где-то еще, что данное поле нужно преобразовывать к строке при его чтении из БД?

UPD: изменять тип полей нужно не в runtime, не в самой БД делать alter, и тд и тп. Нужно просто указать в конфиге, что вот такое-то поле в БД у нас тип int, но мы его должны записать в свойство класса как string.
  • Вопрос задан
  • 141 просмотр
Пригласить эксперта
Ответы на вопрос 1
@Flying
Лезть в исходники mapping'ов для entities в Doctrine явно не стоит т.к. Doctrine поддерживает несколько вариантов задания mapping'а и никто заранее не скажет вам какой источник (или источники) используются - это определяется конфигурацией Doctrine.

Стандартным способом работы с mapping'ами в runtime является ClassMetadata API. Получить доступ к class metadata factory можно через EntityManager::getMetadataFactory() либо, если вас интересует конкретный entity - через EntityManager::getClassMetadata().

Объект ClassMetadataInfo содержит информацию обо всех деталях mapping'а конкретной entity. Большинство его properties объявлено как public для более быстрого доступа, хотя писать туда, разумеется, запрещено.

Класс весьма большой, так что проще всего посмотреть на его содержимое либо в отладчике либо через какой-нибудь dump. Конкретно mapping'и полей находятся в переменной $fieldMappings.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы