如何取消设置克隆的PHP对象的id
我正在开发一个使用Docrtrine和Symfony 2.7的项目.我有一个我想要克隆的Document实体,我当然需要确保我没有重复的主键.这是我到目前为止所尝试的:
/** * Document * * @ORMTable(name="documents") */ class Document { public function ___clone(){ $newObj = clone $this; $newObj->id = null; return $newObj; } ... } 但是,这似乎并不多,因为当我调用clone myDocument然后尝试持久化时,我仍然收到此消息:
如何让对象的主键恢复为空或自动递增状态? ===== Upate:使用 public function __clone(){ $this->id = null; } 仍会导致相同的错误.完整错误文字:
解决方法
这不是
PHP’s cloning的工作原理.想想__clone就像__construct一样.在__clone方法中,必须将新值分配给$this.
class Document { public function ___clone() { // simple as that $this->id = null; } } 在您当前的代码中,$newObj将被丢弃,而克隆的对象仍然具有原始ID. 另外,如果要创建深层副本,请记住在__clone方法中克隆子对象,否则最终会有两个引用相同子级的实体. (或者,在坚持/重新加载之后:其中一个实体将失去其子女.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |