Pat*_*ick 3 php doctrine clone auto-increment symfony
我正在开发一个使用Docrtrine和Symfony 2.7的项目.我有一个我想要克隆的Document实体,我当然需要确保我没有重复的主键.这是我到目前为止所尝试的:
/**
* Document
*
* @ORM\Table(name="documents")
*/
class Document {
public function ___clone(){
$newObj = clone $this;
$newObj->id = null;
return $newObj;
}
...
}
Run Code Online (Sandbox Code Playgroud)
然而,这似乎并不多,因为当我打电话clone myDocument然后尝试坚持时,我仍然得到这样的信息:
SQLSTATE [23000]:完整性约束违规:1062密钥"UNIQ_A2B07288ECC6147F"的重复条目"1"
如何让对象的主键恢复为空或自动递增状态?
=====
Upate:使用
public function __clone(){
$this->id = null;
}
Run Code Online (Sandbox Code Playgroud)
仍会导致相同的错误.完整错误文字:
执行'INSERT INTO文件(usageFrom,usageTo,status,workflow_identifier,created_date,modified_date,language_id,translationRoot_id,ownerGroup_id,responsible_ser_id,production_id,media_id,created_user,modified_user)VALUES(?,?,?,?,?, ?,?,?,?,?,?,?,?,?)'与params ["2018-06-28 09:54:37","2018-06-28 09:54:37",100, "4cc723c2a5730c1b9c2ed6428ae57205","2018-06-28 09:54:37","2018-06-28 09:54:37",null,null,null,null,1,null,1,1]:
SQLSTATE [23000]:完整性约束违规:1062密钥"UNIQ_A2B07288ECC6147F"的重复条目"1"
这不是PHP克隆的工作原理.想想__clone喜欢的__construct.在该__clone方法中,您必须将新值分配给$this.
class Document
{
public function ___clone()
{
// simple as that
$this->id = null;
}
}
Run Code Online (Sandbox Code Playgroud)
在您当前的代码中,$newObj将被丢弃,而克隆的对象仍然具有原始ID.
另外,__clone如果要创建深层副本,请记住在方法中克隆子对象,否则最终会引用两个引用相同子级的实体.(或者,在坚持/重新加载之后:其中一个实体将失去其子女.)
| 归档时间: |
|
| 查看次数: |
296 次 |
| 最近记录: |