2016-04-29 13 views
1

У меня есть следующий документ:Как установить начальное значение для Id со стратегией Приращение на доктрине MongoDB на Symfony?

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

Я использую этот документ в 2.8.4 проекта Symfony. В этом случае идентификатор для первого документа, который я сохраняю, равен «1», а следующий - «2» и т. Д.

Я хотел бы начать счетчик с 1000, но я не могу понять, как я могу это сделать в «Модельной части».

Благодаря

ответ

1

К сожалению, в настоящее время способ установить счетчик в «Model части», но поскольку текущие счетчики хранятся в базе данных, вы можете изменить их значение там. Для более подробной информации о том, как эту работу вы можете проверить, как работает IncrementGenerator::generate.

0

Это может быть идеальное использование SequenceGenerator, но не поддерживается платформой.

Один из способов (из модели, к сожалению) состоит в том, чтобы вручную установить первый идентификатор.

В контроллере:

$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 

Не забудьте добавить функцию сеттер в вашей покупки документа:

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

    return $this; 
} 

Затем удалите эту логику (или обернуть его в чек, чтобы проверить что объект является первым, который сохраняется).