Попробуйте клонировать и добавьте следующий метод к вашей сущности
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
Копаясь в коде Doctrine, это происходит потому, что сгенерированные прокси-классы реализуют __clone()
с этой важной строкой
unset($this->_entityPersister, $this->_identifier);