доктрина:mongodb:fixtures:load удаляет созданные индексы

Я использую Symfony 2 с ODM Doctrine Mongodb и пытаюсь создать некоторые индексы, которые работают вместе с уже созданными фикстурами, которые я пытаюсь загрузить с помощью

  php -f app/console doctrine:mongodb:fixtures:load

Когда я создаю индексы в своих документах, загрузка фикстур завершается с ошибкой

  [Doctrine\ODM\MongoDB\MongoDBException]                                                                   
  Cannot execute unindexed queries on Updatemi\LibraryBundle\Document\UpdateTerm. Unindexed fields: update

Разве ODM не генерирует индексы сам по себе?


person Paul Weber    schedule 22.05.2014    source источник


Ответы (1)


После некоторых исследований я нашел решение этой проблемы.

Doctrine не создает индексы автоматически, после их удаления вам придется сделать это самостоятельно, с помощью команды

sf doctrine:mongodb:schema:create --index 

Это не решает проблему для фикстур, поскольку они удаляют все перед выполнением своего кода.

Но есть решение и этой проблемы!

В начале файла с фикстурами добавьте строку, которая регенерирует для вас индексы.

    $dm = $this->container->get('doctrine.odm.mongodb.document_manager');
    $dm->getSchemaManager()->ensureIndexes();

Также существует запрос на извлечение библиотеки doctrine_fixtures, чтобы избежать удаления индексов при загрузке фикстуры, так что, надеюсь, это исправление больше не нужно.

https://github.com/doctrine/data-fixtures/pull/118

person Paul Weber    schedule 22.05.2014