Mon entité utilise cette annotation pour son ID:
/**
* @orm:Id
* @orm:Column(type="integer")
* @orm:GeneratedValue(strategy="AUTO")
*/
protected $id;
À partir d'une base de données propre, j'importe des enregistrements existants d'une base de données plus ancienne et j'essaie de conserver les mêmes identifiants. Ensuite, lors de l'ajout de nouveaux enregistrements, je veux que MySQL incrémente automatiquement la colonne ID comme d'habitude.
Malheureusement, il semble que Doctrine2 ignore complètement l'ID spécifié.
Nouvelle solution
Selon les recommandations ci-dessous, ce qui suit est la solution préférée:
$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());
Ancienne solution
Étant donné que Doctrine pivote hors de ClassMetaData pour déterminer la stratégie du générateur, elle doit être modifiée après avoir géré l'entité dans EntityManager:
$this->em->persist($entity);
$metadata = $this->em->getClassMetaData(get_class($entity));
$metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE);
$this->em->flush();
Je viens de tester cela sur MySQL et cela a fonctionné comme prévu, ce qui signifie que les entités avec un ID personnalisé étaient stockées avec cet ID, tandis que celles sans ID spécifié utilisaient le lastGeneratedId() + 1
.