Спробуйте клонувати та додайте наступний метод до своєї сутності
public function __clone() {
$this->id = null;
}
Можливо, вам доведеться від'єднати сутність, перш ніж зберігати її. Зараз у мене немає зручної машини для тестування.
$f = clone $e;
$em->detach($f);
$em->persist($f);
$em->flush();
Оновлення
Просто спробував використати просту демонстрацію SQLite. Вам не потрібно нічого робити. Наступне працювало для мене, не додаючи __clone()
методу і не роблячи чогось іншого незвичного
$new = clone $old;
$em->persist($new);
$em->flush();
Після очищення $new
сутність мала новий ідентифікатор і була збережена як новий рядок у БД.
Я б як і раніше обнуляв властивість ID за допомогою __clone()
методу, оскільки це має сенс із чистого погляду моделі.
Оновлення 2
Копаючись у коді доктрини, це пов’язано з тим, що створені проксі-класи реалізуються за __clone()
допомогою цього важливого рядка
unset($this->_entityPersister, $this->_identifier);
$f = clone $e
? Можливо, вам доведеться застосувати__clone()
метод