Почему я не могу создать модель Доктрины под названием "Альбом"

Я использую Doctrine как ORM в своем проекте, но столкнулся со странной ошибкой:

Используя следующий YAML:

Album:
  tableName: dpp_album
  actAs: [Timestampable]
  columns:
    name: string(255)
    description: string(255)
    online: boolean

Затем я генерирую свои модели, но после обновления страницы и автозагрузки моделей PHP выдает эту ошибку:

Неустранимая ошибка: класс BaseAlbum не найден в E: \ sites \ dpp \ system \ application \ models \ Album.php в строке 13

Как ни странно, все мои другие модели в порядке, и в этих случаях можно найти базовые классы.

При изменении названия «Альбом» на что-то вроде «Установить» это просто работает! Разве это не странно ?!

Таким образом, кажется, что использование «Альбома» как-то конфликтует, хотя сообщение об ошибке предлагает что-то еще. Смена альбомов на множественное число тоже не работает, все остальное прекрасно!

Какие-либо предложения?

Спасибо!


person Sander Versluys    schedule 06.12.2009    source источник
comment
Я предполагаю, что «Альбом» - это зарезервированное ключевое слово для этого ORM, исходя из вашего описания. Возможно, есть способ обойти это с помощью разделителя ...   -  person James Kolpack    schedule 06.12.2009
comment
Я тоже так думал, хотя странно, если так! Но при поиске документов и исходного кода я не смог найти ничего с названием «Альбом» ... :-(   -  person Sander Versluys    schedule 06.12.2009
comment
google.com/ код Google находит также применение классов альбома.   -  person Cups    schedule 07.12.2009
comment
Конечно, это обычное название для модели, но оно не входит в стандартный дистрибутив Doctrine.   -  person Sander Versluys    schedule 07.12.2009


Ответы (2)


Если опция generateBaseClasses установлен (по умолчанию). generateModelsFromYaml () в вашем случае создаст класс AlbumBase (по умолчанию в подкаталоге generated) и пустой класс Album extends AlbumBase. Т.е. если Album создан, AlbumBase должен быть уже известен или загружен каким-либо автозагрузчиком.

person VolkerK    schedule 06.12.2009

Проблема заключается в порядке автозагрузки классов модели.

Сгенерированные «базовые» модели находятся в каталоге «models / generated», а другие - в каталоге выше.

Порядок загрузки не может быть гарантирован, поэтому иногда модель загружается раньше базовой модели, на которую она расширяется, что вызывает эту ошибку.

В моем файле начальной загрузки я явно включил порядок загрузки каталогов следующим образом:

Doctrine::loadModels(array(APPPATH.'/models/generated', APPPATH.'/models'));

В документации используется множество примеров, приводящих к сгенерированным файлам, но не упоминается такое поведение, когда речь идет о конфигурациях начальной загрузки.

В любом случае, счастлив, что теперь это исправлено! :-)

person Sander Versluys    schedule 06.12.2009