Doctrine2 - Нет классов метаданных для обработки
Что-то не так с документацией или мной. Я делаю все, что говорит документация.
Когда я положил терминал:
$ php vendor/bin/doctrine orm:schema-tool:create
Выход:
No Metadata Classes to process
Я читаю много сообщений и google и стараюсь много примеров, но ничего.
http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/getting-started.html
Ответы
Ответ 1
Я думаю, вы взяли пример конфигурации из Doctrine2: начало работы:
$isDevMode = true;
$config = Setup::createAnnotationMetadataConfiguration(array(__DIR__."/src"), $isDevMode);
Теперь уловка заключается в том, что метод Setup:: createAnnotationMetadataConfiguration по умолчанию использует SimpleAnnotationReader. Вы можете изменить это поведение, изменив пятый параметр на false:
$isDevMode = true;
$config = Setup::createAnnotationMetadataConfiguration(array(__DIR__."/src"), $isDevMode, null, null, false);
Это заставит Doctrine использовать не простой AnnotationReader, который теперь сможет обрабатывать ваши модели!
Ответ 2
TL; DR: убедитесь, что тип созданных метаданных совпадает с используемым вами методом создания метаданных.
Я столкнулся с одной и той же проблемой при работе в руководстве Doctrine "Getting Started". Просмотрев код Doctrine немного, я понял, что происходит не так. В основном, код в учебнике в разделе "Получение EntityManager":
$config = Setup::createAnnotationMetadataConfiguration(
array(__DIR__."/src"), $isDevMode);
Немного дальше в учебнике, в разделе "Начиная с продукта", он показывает нам, как настроить метаданные, в качестве примера для каждого из возможных вариантов этого. В учебнике говорится:
Метаданные для объектов настраиваются с использованием аннотаций XML, YAML или Docblock. В этом руководстве по началу работы отображаются сопоставления для всех драйверов сопоставления. Ссылки в тексте будут сделаны для отображения XML.
Из-за этого утверждения я решил использовать конфигурацию XML. К сожалению, метод createAnnotationMetadataConfiguration
в коде учебника, похоже, не использовал файл XML, который я создал. (Оглядываясь назад, кажется гораздо более очевидным, что этот метод специально ссылается на метаданные аннотации, а не на метаданные XML!)
После того, как я изменил его на createXMLMetadataConfiguration
, он работал, как ожидалось. Таким образом, похоже, что одним из возможных источников этой проблемы является то, что используемый вами метод настройки метаданных может не соответствовать типу созданных метаданных.
Ответ 3
Попробуйте очистить кеш:
sudo -u www-data php app/console cache:clear --env=dev
Ответ 4
Раскомментируйте одну из следующих строк в bootstrap.php:
// or if you prefer yaml or XML
//$config = Setup::createXMLMetadataConfiguration(array(__DIR__."/config/xml"), $isDevMode);
//$config = Setup::createYAMLMetadataConfiguration(array(__DIR__."/config/yaml"), $isDevMode);
Это зависит от того, были ли созданы мета файлы конфигурации yaml или xml...
Надеюсь, что это поможет.
Ответ 5
Была та же проблема с пользовательской установкой Doctrine. Моим решением было переустановить драйвер метаданных:
$config->setMetadataDriverImpl(
new Doctrine\ORM\Mapping\Driver\AnnotationDriver(
new Doctrine\Common\Annotations\CachedReader(
new Doctrine\Common\Annotations\AnnotationReader(),
new Doctrine\Common\Cache\ArrayCache()
),
ENTITY_DIR
)
);
Решение http://support.skipper18.com/1120/how-use-external-tools-generate-doctrine-getters-and-setters?show=1121#a1121
Мой сценарий был генерирование сущностей из существующей базы данных
newDefaultAnnotationDriver добавляет пространство имен, и в комментариях метода указано следующее:
Если $useSimpleAnnotationReader истинно, обозначение @Entity
будет работа, в противном случае будет поддерживаться нотация @ORM\Entity
.
Ответ 6
У меня была такая же проблема при создании новой конфигурации доктрины в новом модуле ZF2.
Проблема вызвана
'User\Entity' => 'property_entities'
пользовательская часть была из старого объекта
'Property\Entity' => 'property_entities'
Изменение, которое исправило проблему
Ответ 7
Попробуйте выполнить следующую команду:
php vendor/bin/doctrine-module orm:schema-tool:create