Доктрина 2 и Zend 1.11 ошибка преобразования-сопоставления..
У меня сложный дизайн базы данных с представлениями, отношениями и т.д. Мы решили перейти на 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 дней.
Картхик
1 answers
После нескольких часов эксперимента я обнаружил проблему. Очевидно, что это не в Доктрине, это база данных, которую я разработал. Когда вы делаете таблицы "Многие ко многим" в MySQL Workbenck, вы вынуждены выполнять идентификацию отношений, которые создают другую таблицу и создают составные ключи из родительских таблиц. Пожалуйста, убедитесь, что вы называете эти первичные ключи по-другому или, если возможно, удалите составные ключи и используйте их как просто неидентифицирующие отношения. Добавьте еще один столбец с именем id и получите следующее поле в качестве первичного ключа и автоматическая нумерация
У инструмента доктрины также есть проблема с кэшированием, поэтому, пожалуйста, убедитесь, что вы переименовываете базу данных каждый раз, когда вносите изменения, и меняете ее в своей конфигурации zend.
Надеюсь, это кому-то поможет. Если у вас все еще есть проблемы, пожалуйста, задавайте свои вопросы здесь, я смогу на них ответить.