Ошибка: индекс '' не существует в таблице при попытке создать сущности в Doctrine 2.0 CLI

У меня есть база данных mySQL. Я пытаюсь заставить Doctrine2 создавать объекты из схемы MySQL. Я попробовал это с нашей производственной базой данных и получил следующую ошибку:

[Doctrine\DBAL\Schema\SchemaException] Индекс '' не существует для пользователя таблицы

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

Вот таблица, для которой я пытался создать сущность. (Должно быть просто)

mysql> desc user;  
+-----------+-------------+------+-----+---------+----------------+  
| Field     | Type        | Null | Key | Default | Extra          |  
+-----------+-------------+------+-----+---------+----------------+  
| iduser    | int(11)     | NO   | PRI | NULL    | auto_increment |  
| firstname | varchar(45) | YES  |     | NULL    |                |  
| lastname  | varchar(45) | YES  |     | NULL    |                |  
| username  | varchar(45) | YES  |     | NULL    |                |  
+-----------+-------------+------+-----+---------+----------------+  
4 rows in set (0.00 sec)  

Вот команда, которую я использовал в попытке создать указанные объекты:

./doctrine orm:convert-mapping --from-database test ../models/test

Я бегу:

  • 5.1.49-1ubuntu8.1 (убунту)
  • mysql Ver 14.14 Distrib 5.1.49, для debian-linux-gnu (i686) с использованием readline 6.1
  • Доктрина 2.0.1

person Don Briggs    schedule 28.04.2011    source источник


Ответы (1)


Я сталкиваюсь с той же проблемой прямо сейчас. Я проследил проблему до того, что первичный ключ не был правильно идентифицирован / установлен. Значение по умолчанию — логическое (false), которое преобразуется в строку ''. Впоследствии Doctrine не может найти индекс для этого атрибута. ;-)

Решение: определите ПЕРВИЧНЫЙ КЛЮЧ.

person Yeti    schedule 29.04.2011
comment
Да, я проследил проблему до этого. Кажется, что некоторые из таблиц в нашей базе данных были созданы с полями, которые представляют собой уникальные целые числа с автоинкрементом, в основном называемые «id», а не первичные ключи. Мы рассматривали эти поля как первичные ключи и использовали их как таковые. Однако на самом деле они не ПК. Я не создавал нашу базу данных. В нашей структуре есть ряд «причуд», и это одна из них. Я создал программу для поиска таблиц, у которых нет первичных ключей, и запустил сценарии MySQL ALTER TABLE, чтобы изменить индекс «id» на PK. - person Don Briggs; 03.05.2011
comment
Итак, вот процесс: (1) Убедитесь, что все ваши таблицы имеют первичные ключи, даже если вам придется временно добавить поддельные первичные ключи. (2) Попросите Doctrine сгенерировать YAML из схемы. (3) Просмотрите YAML и удалите фиктивные первичные ключи, которые вы добавили. (4) Попросите Doctrine сгенерировать сущности из очищенных YAML. - person Don Briggs; 13.05.2011