1

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?

Angelo A
  • 2,744
  • 6
  • 28
  • 37
  • What do you want to make with the clones ? Should they have a new ID or not ? – codeneuss Jun 16 '15 at 12:53
  • @v.eigler they should become new rows in the database, so they need new ID's – Angelo A Jun 16 '15 at 12:53
  • possible duplicate of [How to re-save the entity as another row in Doctrine 2](http://stackoverflow.com/questions/9071094/how-to-re-save-the-entity-as-another-row-in-doctrine-2) – codeneuss Jun 16 '15 at 12:56
  • @v.eigler I know I can use clone. But what I'm asking is, how to clone their relations as well. The link you posted only discusses one object – Angelo A Jun 16 '15 at 12:58

1 Answers1

1

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();
Peter Bailey
  • 105,256
  • 31
  • 182
  • 206