anche
anche

Reputation: 2884

Doctrine get objects, manipulate data and insert as new rows

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

Answers (1)

Peter Bailey
Peter Bailey

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

Related Questions