Varlığım, kimliği için şu ek açıklamayı kullanıyor:
/**
* @orm:Id
* @orm:Column(type="integer")
* @orm:GeneratedValue(strategy="AUTO")
*/
protected $id;
Temiz bir veritabanından, eski bir veritabanındaki mevcut kayıtları içe aktarıyorum ve aynı kimlikleri tutmaya çalışıyorum. Ardından, yeni kayıtlar eklerken, MySQL'in her zamanki gibi Kimlik sütununu otomatik olarak artırmasını istiyorum.
Maalesef, Doctrine2 belirtilen kimliği tamamen görmezden geliyor gibi görünüyor.
Yeni Çözüm
Aşağıdaki önerilere göre tercih edilen çözüm şu şekildedir:
$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());
Eski Çözüm
Doctrine, jeneratör stratejisini belirlemek için ClassMetaData'nın dışına çıktığı için, EntityManager'da varlık yönetildikten sonra değiştirilmesi gerekir:
$this->em->persist($entity);
$metadata = $this->em->getClassMetaData(get_class($entity));
$metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE);
$this->em->flush();
Bunu MySQL üzerinde test ettim ve beklendiği gibi çalıştı, yani özel bir kimliği olan Varlıklar bu kimlikle saklanırken, kimliği belirtilmemiş olanlar lastGeneratedId() + 1
.