如何在Doctrine 2中将实体重新保存为另一行
假设我有实体$e
。 有没有任何通用的方式来存储它作为另一行,将具有相同的实体数据,但另一个主键?
为什么我需要这个:我正在实现某种时态数据库模式,而不是更新行,我只需要创build另一个。
尝试克隆并添加以下方法到您的实体
public function __clone() { $this->id = null; }
在坚持实体之前,您可能需要分离实体。 我现在没有我的开发机器来testing它。
$f = clone $e; $em->detach($f); $em->persist($f); $em->flush();
更新
只是尝试使用一个简单的SQLite演示。 你不需要做任何事情。 以下工作对我来说没有添加__clone()
方法或做任何不寻常的事情
$new = clone $old; $em->persist($new); $em->flush();
一旦刷新, $new
实体拥有一个新的ID,并保存为DB中的新行。
我仍然会通过__clone()
方法来__clone()
ID属性,因为从纯模型视图来看它是有意义的。
更新2
挖掘到Doctrine代码,这是因为生成的代理类实现__clone()
这个重要的行
unset($this->_entityPersister, $this->_identifier);
以下是我使用的一个简单的策略,并不涉及过多的复杂性:
$new->fromArray( $old->toArray() ); $new->id = NULL;