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

时间:2016-04-29 10:37:32

标签: php mongodb symfony doctrine-orm database

我有以下文件:

class Purchase
{
  /**
   * @MongoDB\Id(strategy="INCREMENT")
   */
  protected $id;
...

我在Symfony 2.8.4项目中使用此文档。 在这种情况下,我坚持的第一个文档的ID是' 1',下一个文档将是' 2'等等。

我想从1000开始计数器,但我无法在"模型部分"中找到我如何做到这一点。

由于

2 个答案:

答案 0 :(得分:1)

不幸的是,现在有办法在"模型部分"中设置计数器,但由于当前计数器存储在数据库中,您可以在那里更改它们的值。有关此工作的更多详细信息,您可以检查IncrementGenerator::generate的工作原理。

答案 1 :(得分:0)

它可以完美地使用SequenceGenerator,但平台不支持。

一个解决方法(不幸的是,在模型之外)包括手动设置第一个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功能:

/**
 * @param int $id
 *
 * @return Purchase
 */
public function setId($id)
{
    $this->id = $id;

    return $this;
}

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