Подтвердить что ты не робот

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

4b9b3361

Ответ 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