Отображение Symfony2 Doctrine2 из существующей базы данных (исключение) - PullRequest
4 голосов
/ 12 августа 2011

У меня уже есть база данных MySQL, поэтому я хочу создать метаданные отображения из existing database.

php app/console doctrine:mapping:convert xml ./src/MainBundle/Resources/config/doctrine/metadata/orm --from-database --force

Однако я получил следующее исключение

[Doctrine\ORM\Mapping\MappingException] 
Property "customerid" in "Accountcustomer" was already declared, but it must be declared only once

Я не использовал customerId ни в одном первичном / составном ключе нигде в базе данных, однако несколько раз использовал его как внешний ключ.

Однако я не знаю, как это может повлиять на наличие customerId в составном ключе или другом первичном ключе.

Ответы [ 4 ]

6 голосов
/ 18 августа 2011

К сожалению, Doctrine 2.0 не поддерживает первичные ключи как внешние ключи ... Проверьте ссылку: http://www.doctrine -project.org / docs / orm / 2.0 / en / reference / sizes-and-known-questions.HTML

3 голосов
/ 23 апреля 2015

Другое решение:

Удалите все внешние ключи, тогда это будет работать :).

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

Чтобы удалить все внешние ключи:

запустите этот SQL-запрос -

MySQL

SELECT concat('ALTER TABLE ', TABLE_NAME, ' DROP FOREIGN KEY ', CONSTRAINT_NAME, ';') 
FROM information_schema.key_column_usage 
WHERE CONSTRAINT_SCHEMA = 'db_name' AND referenced_table_name IS NOT NULL;

PostgreSQL

SELECT concat('ALTER TABLE ', table_name, ' DROP CONSTRAINT IF EXISTS ', constraint_name, ';')
FROM information_schema.key_column_usage
WHERE constraint_schema = 'public' AND constraint_catalog = 'one' AND constraint_name LIKE '%_fkey';

, а затем снова выполните полученный SQL-запрос.

0 голосов
/ 13 августа 2018

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

php bin/console doctrine:mapping:import App\\Entity annotation --path=src/Entity --force --verbose --no-interaction

Сообщение об ошибке: «Свойство» вакансия »в« Пользователь »уже объявлено, но оно должно быть объявлено

Я нашел причину ошибки при отладке доктрины

если существует связь между одной и несколькими таблицами со многими значениями и имя столбца совпадает в соответствующей таблице Существует связь между таблицей пользователя и vacancy_a, vacancy_b на имя столбца vacancy_id.

select C.COLUMN_NAME,C.TABLE_NAME,K.* from information_schema.KEY_COLUMN_USAGE K inner join information_schema.`COLUMNS` C on (C.TABLE_NAME = K.TABLE_NAME and C.TABLE_SCHEMA = K.TABLE_SCHEMA) where K.TABLE_SCHEMA='schema_name' and K.REFERENCED_TABLE_NAME='**user**' and C.COLUMN_NAME='**vacancy**_id' order by C.COLUMN_NAME

Результатом запроса является соответствующий столбец и таблица.

Решение: переименовать в имя столбца

ALTER TABLE vacancy_a CHANGE vacany_id vacancy_a_id int(11);
0 голосов
/ 06 августа 2015

Я получил ту же ошибку, и я заметил, что у меня был двойной ключ (ограничение) для отдельных отношений в БД. Удаляя его, все работало нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...