Laravel根据Model数据复制一条记录

背景

最近需要写个脚本补历史数据,要根据某条记录,复制一条记录,修改一个字段后再插入表中,原来想的比较简单,代码这样写:


$oldModel = Model::query()->where('id', 123)->first();
$newModel = clone $oldModel ;
unset($newModel->id);
$newModel->status= 5;
$newModel->save();

我以为这样就行了,clone嘛,新数据就写入了,但是测试的时候发现,不仅新数据没有写入,旧的数据还被修改了,还好是测试环境,不然问题就大了

解决方式

后面查了一下资料,其实laravel是支持这种做法的,但是要用另外一个方法,replicate(),代码应该这样写

$newModel= Model::find(123)->replicate();
$newModel->status= 5;
$newModel->save();

经过测试,可以复制一条新的数据,并且字段会更新

点赞