Reputation: 2884
I have three doctrine objects who can be connected to each other in different ways. I need to get them from my database, manipulate some of the data and insert them as new rows.
Example:
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'
now I want to manipulate all the manipulateThis columns and add all the objects I got into new rows in the database. How do I do this?
I can't just persist all of those objects and then flush them, because when the objects get cloned (which need to happen if I want new rows), the ID's will be removed.
How can I manage to do this?
UPDATE
seems I can use __clone to make this work. But now I have a problem where I don't know if one object is persisted or not.
For example: Entity A can have relations to entity B. But not all B entities have a relation to entity A. But I need to persist those entities too. I can persist and flush all A entities, and all the B entities which have a connection will be flushed aswell. But now nothing happens with the B entities who have no connection. And I can't flush all the B entities, because than I get double rows. And how to fix this problem with the C and D entities, which are even further away?
Upvotes: 1
Views: 978
Reputation: 105868
Just using PHP's clone is sufficient to duplicate an entity as a new row
$newEntity = clone $alreadyPersistedEntity;
// Manipulate $newEntity as desired
$em->persist($newEntity);
$em->flush();
Upvotes: 1