Ошибка преобразования карт Doctrine 2 и Zend 1.11. - PullRequest
9 голосов
/ 28 июля 2011

У меня сложный дизайн базы данных с представлениями, связями и т. Д. Мы решили перейти на ORM со стандартного Zend_db. Я успешно интегрировал Zend 1.11 и доктрину 2.1. Во всех руководствах рассказывается о создании всей базы данных с помощью рукописных классов. Но как насчет уже существующей базы данных с данными в ней? Я снова искал и обнаружил, что я должен использовать приведенную ниже команду

php orm:convert-mapping --from-database php path/where/you/want/to/store/mapping/classes

Когда я делаю это для простой базы данных только с 3 таблицами и без каких-либо взаимосвязей, вышеуказанная команда прекрасно работает.

Но когда я пытался использовать ту же команду в моей базе данных, она выдает исключение, говорящее

[Doctrine\ORM\Mapping\MappingException]

Property "employeeid" in "Organization_has_employees" was already declared, but it must be
declared only once

Я изменил все свои имена полей, чтобы в одной из таблиц не было повторяющихся имен, но все равно не повезло.

Пожалуйста, помогите мне с этим. Я ломаю голову более 3 дней.

Karthik

1 Ответ

12 голосов
/ 29 июля 2011

После нескольких часов эксперимента я обнаружил проблему. Очевидно, что это не Doctrine, это база данных, которую я разработал. Когда вы создаете таблицы «многие ко многим» в MySQL Workbenck, вы вынуждены делать «Идентификация отношений», которая создает другую таблицу и создает составные ключи из родительских таблиц. Пожалуйста, убедитесь, что вы называете эти первичные ключи по-другому или, если возможно, удалите композитные ключи и используйте их как неидентифицирующие отношения. Добавьте еще один столбец с именем id и используйте это поле в качестве первичного ключа и автоматическую нумерацию

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

Надеюсь, это поможет кому-то там. Если у вас все еще есть проблемы, пожалуйста, оставьте свои вопросы здесь, я смогу ответить на них.

...