加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

如何取消设置克隆的PHP对象的id

发布时间:2020-12-13 21:33:25 所属栏目:PHP教程 来源:网络整理
导读:我正在开发一个使用Docrtrine和Symfony 2.7的项目.我有一个我想要克隆的Document实体,我当然需要确保我没有重复的主键.这是我到目前为止所尝试的: /** * Document * * @ORMTable(name="documents") */class Document { public function ___clone(){ $newOb
我正在开发一个使用Docrtrine和Symfony 2.7的项目.我有一个我想要克隆的Document实体,我当然需要确保我没有重复的主键.这是我到目前为止所尝试的:

/**
 * Document
 *
 * @ORMTable(name="documents")
 */
class Document {
    public function ___clone(){
        $newObj = clone $this;
        $newObj->id = null;
        return $newObj;
    }
...
}

但是,这似乎并不多,因为当我调用clone myDocument然后尝试持久化时,我仍然收到此消息:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry
‘1’ for key ‘UNIQ_A2B07288ECC6147F’

如何让对象的主键恢复为空或自动递增状态?

=====

Upate:使用

public function __clone(){
    $this->id = null;
}

仍会导致相同的错误.完整错误文字:

An exception occurred while executing ‘INSERT INTO documents
(usageFrom,usageTo,status,workflow_identifier,created_date,
modified_date,language_id,translationRoot_id,ownerGroup_id,
responsibleUser_id,production_id,media_id,created_user,
modified_user) VALUES (?,?,?)’ with
params [“2018-06-28 09:54:37”,“2018-06-28 09:54:37”,100,
“4cc723c2a5730c1b9c2ed6428ae57205”,“2018-06-28
09:54:37”,null,1,1]:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry
‘1’ for key ‘UNIQ_A2B07288ECC6147F’

解决方法

这不是 PHP’s cloning的工作原理.想想__clone就像__construct一样.在__clone方法中,必须将新值分配给$this.

class Document 
{
    public function ___clone()
    {
        // simple as that
        $this->id = null;
    }
}

在您当前的代码中,$newObj将被丢弃,而克隆的对象仍然具有原始ID.

另外,如果要创建深层副本,请记住在__clone方法中克隆子对象,否则最终会有两个引用相同子级的实体. (或者,在坚持/重新加载之后:其中一个实体将失去其子女.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读