具有SINGLE_COLLECTION模式类型的ODM继承文档创建错误

问题描述 投票:1回答:1

我在Symfony 4.4应用程序中配置了类型为SINGLE_COLLECTION的继承文档。当我运行命令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类型的声明。

如何解决?

php mongodb symfony doctrine doctrine-odm
1个回答
1
投票

ODM的odm:schema:create正在遍历所有元数据,并尝试创建一个集合,而不考虑它们之间的可能关系。一个适当的解决方法是在ODM的SchemaManager中进行检查,以在创建集合之前检查集合是否存在,或者在捕获异常之前将其忽略,如果存在现有集合,则将其忽略。

我创建了https://github.com/doctrine/mongodb-odm/issues/2182来跟踪此问题。如果您有时间,我们将不胜感激!

© www.soinside.com 2019 - 2024. All rights reserved.