原则获取对象,操作数据并作为新行插入


Doctrine get objects, manipulate data and insert as new rows

我有三个教义对象,它们可以通过不同的方式相互连接。我需要从我的数据库中获取它们,操作一些数据并将它们作为新行插入。

例:

entity A:
id
user
manipulateThis
B
C
entity B:
id
user
manipulateThis
C
entity C:
id
user
manipulateThis
A
D
entity D:
id
manipulateThis
C

$allA = SELECT a FROM Acme'Bundle'A a WHERE user=':user'
$allB = SELECT b FROM Acme'Bundle'B b WHERE user=':user'
$allCandD = SELECT c FROM Acme'Bundle'C c JOIN c.d WHERE user=':user'

现在我想操作所有 manipulateThis 列并将我获得的所有对象添加到数据库中的新行中。我该怎么做?

我不能只是保留所有这些对象然后刷新它们,因为当对象被克隆时(如果我想要新行,则需要这样做),ID 将被删除。

我怎样才能做到这一点?

更新

似乎我可以使用__clone来完成这项工作。但是现在我遇到了一个问题,我不知道一个对象是否持久化。

例如:实体 A 可以与实体 B 有关系。但并非所有 B 实体都与实体 A 有关系。但我也需要保留这些实体。我可以保留和刷新所有 A 实体,并且所有具有连接的 B 实体也将刷新。但是现在没有联系的B实体没有任何反应。而且我无法刷新所有 B 实体,因为我得到的是双行。以及如何用更远的 C 和 D 实体解决这个问题?

仅使用 PHP 的克隆就足以将实体复制为新行

$newEntity = clone $alreadyPersistedEntity;
// Manipulate $newEntity as desired
$em->persist($newEntity);
$em->flush();