Документ наследования ODM с ошибкой создания схемы типа SINGLE_COLLECTION - PullRequest
2 голосов
/ 05 мая 2020

У меня есть документ наследования с типом SINGLE_COLLECTION, настроенный в моем приложении Symfony 4.4. Когда я запускаю команду bin/console doctrine:mongodb:schema:create, возникает ошибка a collection 'db.Person' already exists.

Все было сделано согласно документации: https://www.doctrine-project.org/projects/doctrine-mongodb-odm/en/2.0/reference/inheritance-mapping.html#single -collection-inheritance

src / Document / Person. php

<?php

namespace App\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;

/**
 * @MongoDB\Document
 * @MongoDB\InheritanceType("SINGLE_COLLECTION")
 * @MongoDB\DiscriminatorField("type")
 * @MongoDB\DiscriminatorMap({"person"=Person::class, "employee"=Employee::class})
 */
class Person
{
    /**
     * @var integer|null
     *
     * @MongoDB\Id
     */
    protected $id;

    /**
     * @var string|null
     *
     * @MongoDB\Field(type="string")
     */
    protected $name;
}

src / Document / Employee. php

<?php

namespace App\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;

/**
 * @MongoDB\Document
 */
class Employee extends Person
{

    /**
     * @var string|null
     *
     * @MongoDB\Field(type="string")
     */
    protected $grade;
}

Это похоже на команду пытается создать коллекцию БД для каждого класса Document, игнорируя объявление типа SINGLE_COLLECTION.

Как это исправить?

1 Ответ

2 голосов
/ 10 мая 2020

ODM odm:schema:create перебирает все метаданные и пытается создать коллекцию, не учитывая возможные отношения между ними. Правильное исправление было бы в ODM SchemaManager, чтобы проверить, существует ли коллекция до создания или перехвата исключения, и игнорировать его в случае существующей коллекции.

Я создал https://github.com/doctrine/mongodb-odm/issues/2182 для отслеживания этой проблемы. Если у вас будет свободное время, мы будем благодарны за PR!

...