Doctrine获取对象,操作数据并插入新行

Doctrine获取对象,操作数据并插入新行

问题描述:

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?

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

示例: p>

  entity A:
id 
user 
manipulateThis 
B 
C 
 
entity B:
id 
user  
nipipulateThis 
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 cd WHERE user =':user  '
  code>  pre> 
 
 

现在我想操纵所有的操纵这些列并将我得到的所有对象添加到数据库中的新行中。 我该怎么做? p>

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

我该如何设法做到这一点? p>

更新 strong> p>

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

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

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();