Doctrine orm 未创建索引
我有一个定义了索引的文档Doctrine orm 未创建索引,doctrine-orm,doctrine-odm,Doctrine Orm,Doctrine Odm,我有一个定义了索引的文档 /** @ODM\Document */ class Stat { /** @ODM\Id(strategy="NONE", type="int") */ private $id; /** @ODM\Field(type="string") */ private $period; /** @ODM\ReferenceOne(targetDocument="Player") */ private $player;
/** @ODM\Document */
class Stat
{
/** @ODM\Id(strategy="NONE", type="int") */
private $id;
/** @ODM\Field(type="string") */
private $period;
/** @ODM\ReferenceOne(targetDocument="Player") */
private $player;
/** @ODM\Field(type="string") @ODM\Index */
private $statType;
但是,当我查看集合中创建的索引时,唯一的索引是_id
要保存我正在执行的文档,请执行以下操作:
$stat = new Documents\Stat();
$stat->setId(1);
$stat->setPlayer($player);
$stat->setPeriod(1);
$stat->setStatType('goal');
$dm->persist($stat);
$dm->flush();
还有什么我没有做的吗?在正常ODM使用期间,不会创建索引(如果索引与映射同步,也不会确保索引)
若您使用的是Symfony,那个么解决问题就很容易了,只需从Symfony的控制台运行doctrine:mongodb:schema:create
命令(若您使用的是其他框架,请查找等效命令,因为命令本身是由ODM提供的)
如果您想从代码中控制索引,可以使用它提供了一个API来直接控制“模式”(您还可以基于每个文档控制索引)。获取它很容易:$sm=$dm->getSchemaManager()代码>在正常ODM使用期间,不会创建索引(如果索引与映射同步,也不会确保索引)
若您使用的是Symfony,那个么解决问题就很容易了,只需从Symfony的控制台运行doctrine:mongodb:schema:create
命令(若您使用的是其他框架,请查找等效命令,因为命令本身是由ODM提供的)
如果您想从代码中控制索引,可以使用它提供了一个API来直接控制“模式”(您还可以基于每个文档控制索引)。获取它很容易:$sm=$dm->getSchemaManager()代码>
然后,如果使用symfony runphp bin/console原则:mongodb:schema:create
然后,如果使用symfony运行php bin/console原则:mongodb:schema:create
//AppBundle/Document
namespace AppBundle\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
use Doctrine\Bundle\MongoDBBundle\Validator\Constraints\Unique as MongoDBUnique;
/**
* @MongoDB\Document(repositoryClass="AppBundle\Repository\ProduitRepository")
* @MongoDBUnique(fields="$noProduit")
*/
class Produit
{
/**
* @MongoDB\Id
*/
protected $id;
/**
* @MongoDB\String
* @MongoDB\UniqueIndex(order="asc")
*/
protected $noProduit;
/**
* @MongoDB\Field(type="string")
*/
protected $libelle;
// getter and setter
}
//应用程序包/控制器
$dm = $this->get('doctrine_mongodb')->getManager();
$dm->getSchemaManager()->ensureIndexes();
运行应用程序时,将自动创建架构和数据库。
有关详细信息//AppBundle/Document
namespace AppBundle\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
use Doctrine\Bundle\MongoDBBundle\Validator\Constraints\Unique as MongoDBUnique;
/**
* @MongoDB\Document(repositoryClass="AppBundle\Repository\ProduitRepository")
* @MongoDBUnique(fields="$noProduit")
*/
class Produit
{
/**
* @MongoDB\Id
*/
protected $id;
/**
* @MongoDB\String
* @MongoDB\UniqueIndex(order="asc")
*/
protected $noProduit;
/**
* @MongoDB\Field(type="string")
*/
protected $libelle;
// getter and setter
}
//应用程序包/控制器
$dm = $this->get('doctrine_mongodb')->getManager();
$dm->getSchemaManager()->ensureIndexes();
运行应用程序时,将自动创建架构和数据库。
更多信息我尝试了odm:schema:create,但仍然得到了所有没有索引的集合。否。我得到:为所有类创建dbs为所有类创建集合为所有类创建索引
没有特定的documentsTry列表使用--class
运行命令并指定classIt确实是正确的答案!此外:条令:mongodb:schema:create创建并更新mongodb模式,条令:mongodb:schema:update可以用来更新它。我尝试了odm:schema:create,但我仍然得到了所有没有索引的集合。否。我得到:为所有类创建dbs为所有类创建集合为所有类创建索引
没有特定的documentsTry列表使用--class
运行命令并指定classIt确实是正确的答案!此外,还可以使用条令:mongodb:schema:create创建并更新mongodb模式和条令:mongodb:schema:update对其进行更新。