Entitas saya menggunakan anotasi ini untuk ID-nya:
/**
* @orm:Id
* @orm:Column(type="integer")
* @orm:GeneratedValue(strategy="AUTO")
*/
protected $id;
Dari database yang bersih, saya mengimpor dalam catatan yang ada dari database yang lebih lama dan mencoba untuk menyimpan ID yang sama. Kemudian, saat menambahkan record baru, saya ingin MySQL menaikkan kolom ID secara otomatis seperti biasa.
Sayangnya, tampaknya Doctrine2 mengabaikan ID yang ditentukan.
Solusi Baru
Sesuai rekomendasi di bawah, berikut ini adalah solusi yang lebih disukai:
$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());
Solusi Lama
Karena Doctrine berporos dari ClassMetaData untuk menentukan strategi generator, itu harus dimodifikasi setelah mengelola entitas di EntityManager:
$this->em->persist($entity);
$metadata = $this->em->getClassMetaData(get_class($entity));
$metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE);
$this->em->flush();
Saya baru saja menguji ini di MySQL dan berfungsi seperti yang diharapkan, yang berarti Entitas dengan ID khusus disimpan dengan ID itu, sedangkan yang tanpa ID ditentukan menggunakan lastGeneratedId() + 1
.
$metadata = $this->getEntityManager()->getClassMetaData(User::class); $metadata->setIdGenerator(new AssignedGenerator()); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE);