Symfony2 и Doctrine: как получить два разных объекта для одного и того же идентификатора?

У меня есть этот сценарий:

Объект A имеет некоторую ссылку на другие объекты B, C, DОбъект B имеет некоторую ссылку на другие объекты A, F, GОбъект C имеет некоторую ссылку на другие объекты A, ...

И так далее.

В моем коде мне нужно сделать «копию» объекта (скажем, A) по причинам tmp (нет, я не могу использовать другую структуру, мне нужна копия объекта).

Если я используюcloneочевидно, я делаю клон своего объекта, но объект, связанный с ним, не клонируется.
Я прекрасно знаю, что могу переопределить магический метод__clone() чтобы присвоить - с точки зрения объекта - B, C, D как клон самих объектов, но у меня есть так много объектов (и многие из них содержатся вArrayCollection в целях доктрины), и я предпочел бы избежать переопределения функции клона каждого объекта.

В качестве альтернативы я подумал, что могу извлечь объект из доктрины, чтобы создать новый, таким образом:

$aCopy = $this->entity_manager
                       ->getRepository('MyBundle:A')
                       ->find($a->getId());

где$a является примеромclass A

После выполнения этой операции -это, конечно, «неправильно», потому что я подозреваю, что доктрина помечает этот объект как «извлеченный alredy» и возвращает его указатель () * - Я просто печатаю ID моих двух объектов с помощьюspl_object_hash() функции и, конечно же, они ссылаются на один и тот же идентификатор объекта, то есть на тот же объект.

PS .:

Я не могу использовать учениеdetach() функция, потому что мне нужно, чтобы исходный объект был доступен после этой операции

Вопрос

Как я могу справиться с этой ситуацией? Как видите, я попробовал два разных способа, и никто из них не удовлетворил меня.

Запись

Я также пометил php, потому что, если кто-то может указать мне другое решение, основанное на php-pure, я также учту его

(*)

В этом случае к статье обращаются дважды от менеджера сущностей, но между ними вносятся изменения. Doctrine 2 понимает это и предоставит вам доступ только к одному экземпляру Article с идентификатором 1234, независимо от того, как часто вы извлекаете его из EntityManager и даже независимо от того, какой метод Query вы используете (find, Repository Finder или DQL). Это называется шаблоном «Карта идентичности», что означает, что Doctrine хранит карту каждой сущности и идентификаторов, которые были получены по запросу PHP, и продолжает возвращать вам одни и те же экземпляры.

Это подтверждает то, что я сказал ранее

Ответы на вопрос(2)

Ваш ответ на вопрос