Php 如何在Symfony上的Doctrine MongoDB文档上使用策略增量设置Id的起始值?

Php 如何在Symfony上的Doctrine MongoDB文档上使用策略增量设置Id的起始值?,php,mongodb,symfony,doctrine-orm,database,Php,Mongodb,Symfony,Doctrine Orm,Database,我有以下文件: class Purchase { /** * @MongoDB\Id(strategy="INCREMENT") */ protected $id; ... /** * @param int $id * * @return Purchase */ public function setId($id) { $this->id = $id; return $this; } 我正在Symfony 2.8.4项目中使用此文档。 在本

我有以下文件:

class Purchase
{
  /**
   * @MongoDB\Id(strategy="INCREMENT")
   */
  protected $id;
...
/**
 * @param int $id
 *
 * @return Purchase
 */
public function setId($id)
{
    $this->id = $id;

    return $this;
}
我正在Symfony 2.8.4项目中使用此文档。 在本例中,我保存的第一个文档的ID为“1”,下一个文档的ID为“2”,依此类推

我想从1000开始计数,但我不知道如何在“模型零件”中进行计数


谢谢

不幸的是,现在有办法在“模型零件”中设置计数器,但由于当前计数器存储在数据库中,您可以在那里更改它们的值。有关此工作原理的更多详细信息,您可以查看其工作原理。

这可能是对的完美使用,但平台不支持

一个解决方法(不幸的是,模型之外)是手动设置第一个ID

在控制器中:

 $object = new Purchase();
 $em = $this->getDoctrine()->getManager():

 $metadata = $em->getClassMetadata(get_class($object));
 $metadata->setIdGeneratorType($metadata::GENERATOR_TYPE_NONE);

 $object->setId(1000);
 $em->persist($object);
 $em->flush();

 print $object->getId(); // 1000
不要忘记在采购文档中添加setter函数:

class Purchase
{
  /**
   * @MongoDB\Id(strategy="INCREMENT")
   */
  protected $id;
...
/**
 * @param int $id
 *
 * @return Purchase
 */
public function setId($id)
{
    $this->id = $id;

    return $this;
}
然后,删除该逻辑(或将其包装在检查中,以验证该对象是第一个被持久化的对象)