내 엔터티는 ID에이 주석을 사용합니다.
/**
* @orm:Id
* @orm:Column(type="integer")
* @orm:GeneratedValue(strategy="AUTO")
*/
protected $id;
깨끗한 데이터베이스에서 이전 데이터베이스의 기존 레코드를 가져와 동일한 ID를 유지하려고합니다. 그런 다음 새 레코드를 추가 할 때 MySQL이 평소와 같이 ID 열을 자동으로 늘리기를 원합니다.
불행히도 Doctrine2는 지정된 ID를 완전히 무시하는 것으로 보입니다.
새로운 솔루션
아래 권장 사항에 따라 다음이 선호되는 솔루션입니다.
$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에서 테스트했으며 예상대로 작동했습니다. 즉, 사용자 지정 ID가있는 엔터티는 해당 ID로 저장되고 지정된 ID가없는 엔터티는 lastGeneratedId() + 1
.
$metadata = $this->getEntityManager()->getClassMetaData(User::class); $metadata->setIdGenerator(new AssignedGenerator()); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE);