Doctrine2 - получить идентификатор сущности перед запуском

Есть ли способ получить идентификатор объекта до сохранения/сброса? Я имею в виду:

$entity = new PointData();
$form   = $this->createForm(new PointDataType(), $entity);

Если в этот момент я попробую $entity- > getId(), он ничего не возвращает.

Я могу заставить его работать:

$em->persist($entity);
$em->flush();

(предположим $em = $this- > getDoctrine() → getEntityManager();)

Как я могу это достичь?

Ответ 1

Если вы хотите узнать идентификатор объекта до его сохранения в базе данных, вы, очевидно, не сможете использовать сгенерированные идентификаторы. Вам нужно будет найти способ генерировать уникальные идентификаторы самостоятельно (возможно, какая-то хеш-функция может создавать уникальные значения).

Это редко бывает хорошей идеей, поэтому вы должны быть осторожны.

Я бы очень тщательно подумал, почему мне нужно знать идентификатор перед флешем. Доктрина неплохо позволяет создать крупный объектный граф, и он будет продолжать/скрывать все сразу. Похоже, что у вас в вашей архитектуре есть что-то уродливое, с которым вы пытаетесь работать. Возможно, будет хорошей идеей рассмотреть это, прежде чем спускать маршрут сгенерированный приложением.