【问题标题】:Doctrine get objects, manipulate data and insert as new rowsDoctrine 获取对象、操作数据并作为新行插入
【发布时间】:2015-06-16 12:51:18
【问题描述】:

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

例子:

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'

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

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

我怎样才能做到这一点?

更新

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

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

【问题讨论】:

  • 你想用克隆做什么?他们应该有一个新的ID吗?
  • @v.eigler 他们应该成为数据库中的新行,所以他们需要新的 ID
  • @v.eigler 我知道我可以使用克隆。但我要问的是,如何克隆他们的关系。您发布的链接仅讨论一个对象

标签: php symfony doctrine-orm


【解决方案1】:

只需使用 PHP 的 clone 就足以将实体复制为新行

$newEntity = clone $alreadyPersistedEntity;

// Manipulate $newEntity as desired

$em->persist($newEntity);
$em->flush();

【讨论】:

  • 它是否也克隆其关系以将它们作为新行插入?
  • 好吧,这确实是我要找的。我更新了我的问题,因为当我使用这种方法时出现了一个新问题。
猜你喜欢
  • 2011-07-17
  • 2020-03-23
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
  • 2018-02-15
  • 1970-01-01
相关资源
最近更新 更多