我有以下文档:
class Purchase
{
/**
* @MongoDBId(strategy="INCREMENT")
*/
protected $id;
...
我正在Symfony 2.8.4项目中使用此文档。在这种情况下,我保存的第一个文档的ID是"1",下一个将是"2",依此类推
我想从1000开始计数器,但我不知道如何在"模型部分"内完成。
感谢
不幸的是,现在有办法在"模型部分"中设置计数器,但由于当前计数器存储在数据库中,您可能会在那里更改它们的值。有关如何工作的更多详细信息,您可以查看IncrementGenerator::generate
的工作方式。
它可以完美地使用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;
}
然后,删除这个逻辑(或者将它包装在一个检查中,以验证该对象是第一个被持久化的对象)。