我在Symfony 4.4应用程序中配置了类型为SINGLE_COLLECTION
的继承文档。当我运行命令bin/console doctrine:mongodb:schema:create
时,会发生错误a collection 'db.Person' already exists
。
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类型的声明。
如何解决?
ODM的odm:schema:create
正在遍历所有元数据,并尝试创建一个集合,而不考虑它们之间的可能关系。一个适当的解决方法是在ODM的SchemaManager
中进行检查,以在创建集合之前检查集合是否存在,或者在捕获异常之前将其忽略,如果存在现有集合,则将其忽略。
我创建了https://github.com/doctrine/mongodb-odm/issues/2182来跟踪此问题。如果您有时间,我们将不胜感激!