Моя сущность использует эту аннотацию для своего идентификатора:
/**
* @orm:Id
* @orm:Column(type="integer")
* @orm:GeneratedValue(strategy="AUTO")
*/
protected $id;
Из чистой базы данных я импортирую существующие записи из более старой базы данных и пытаюсь сохранить одинаковые идентификаторы. Затем, при добавлении новых записей, я хочу, чтобы MySQL автоматически увеличивал столбец идентификатора, как обычно.
К сожалению, похоже, что Doctrine2 полностью игнорирует указанный идентификатор.
Новое решение
Согласно приведенным ниже рекомендациям, следующее: предпочтительное решение:
$this->em->persist($entity);
$metadata = $this->em->getClassMetaData(get_class($entity));
$metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE);
$metadata->setIdGenerator(new \Doctrine\ORM\Id\AssignedGenerator());
Старое решение
Поскольку Doctrine опирается на ClassMetaData для определения стратегии генератора, его необходимо изменить после управления объектом в EntityManager:
$this->em->persist($entity);
$metadata = $this->em->getClassMetaData(get_class($entity));
$metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE);
$this->em->flush();
Я только что протестировал это на MySQL, и он работал как ожидается, что означает, что сущности с настраиваемым идентификатором были сохранены с этим идентификатором, в то время как те, у кого не указан идентификатор, использовали lastGeneratedId () + 1
.