Symfony2, вручную назначьте значение идентификатора таблицы - PullRequest
2 голосов
/ 25 февраля 2012

Я работаю с symfony2, у меня есть таблица, и я хочу вручную назначить идентификатор.

В документации доктрины я нашел это:

Идентификатор стратегии генерации

"NONE: Tells Doctrine that the identifiers are assigned (and thus generated) 
 by your code. The assignment must take place before a new entity is passed to 
 EntityManager#persist. 
 NONE is the same as leaving off the @GeneratedValue entirely."

Обратите внимание на это: «назначение должно произойти до того, как новый объект будет передан в En ..»

Как мне этого добиться?

Я делаю это:

$empleado->setId("989865446");

но там написано:

Entity of type Entity\Empleado is missing an assigned ID. The identifier 
generation strategy for this entity requires the ID field to be populated before 
EntityManager#persist() is called. If you want automatically generated 
identifiers instead you need to adjust the metadata mapping accordingly.

EDIT:

 /**
 * @var integer $id
 * @ORM\Column(name="id", type="integer", nullable=false)
 * @ORM\Id
 */
private $id;

и

public function setId($id)
{
    $this->id = $id;
}

1 Ответ

2 голосов
/ 09 марта 2012

Отправленный вами код верен, поэтому ошибка должна быть связана с тем, как вы создаете объект и когда вызывается функция persist ().

Здесь есть похожий вопрос: Задать значениедля ключа primay со стратегией NONE

Используете ли вы последние версии Symfony 2 / Doctrine 2?

Попробуйте сделать его обязательным параметром конструктора, как предложено в ответе выше- это должно сделать невозможным вызов persist () перед установкой идентификатора.Сообщение об ошибке означает только то, что в нем написано - сначала нужно назначить идентификатор, только затем вызов сохранится.

Вы создаете объект нормально, правильно?Ваш код должен выглядеть следующим образом (здесь я показываю, как он будет работать с идентификатором, требуемым конструктором, но он также должен работать с подходом setId ()):

$empleado = new Entity\Empleado("989865446");
//set other properties
$em->persist($empleado);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...