我有一个案例,我必须克隆控制器中的记录,稍微修改克隆和原始记录,然后保存它们。我已尝试以多种不同的方式实现,但最终总是有一个recod未更新或更新错误。这是让我最接近的代码:
public function postpone( $id = null ){
$this->request->allowMethod( ['post'] );
$originalTask = $this->Tasks->get( $id );
//information that has to be updated
$meetingId = 200;
//set original to removed and update it
$originalTask->removed = 1;
if( $this->Tasks->save( $originalTask ) ){
//Logic for storing a clone task
$cloneTask = $originalTask;
$cloneTask->id = NULL;
$cloneTask->removed = 0;
$cloneTask->meeting_id = $meetingId;
$this->Tasks->save( $cloneTask );
}
}
在这种情况下会发生的情况是,在存储$cloneTask
时,只需更新$originalTask
即可,而无需获取新记录。
在保存可能影响它的逻辑之前或之后我没有自定义。
答案 0 :(得分:1)
您应该在保存“cloneTask”之前创建一个新实体。
if( $this->Tasks->save( $originalTask ) ){
//Logic for storing a clone task
$cloneTask = $this->Tasks->newEntity();
$cloneTask->removed = 0;
$cloneTask->meeting_id = $meetingId;
$this->Tasks->save( $cloneTask );
}