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

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

PS .:

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

Вопрос

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

NoteI»

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

(*)

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

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

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

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