Laravel使用replicate()时如何返回复制后的数据而非布尔值
问题根因
你的代码问题出在对save()方法返回值的错误使用:Laravel Eloquent模型的save()方法返回值为布尔类型,仅代表本次保存操作是否成功,你将save()的返回值直接覆盖了原模型变量$transaction2,所以最终返回的是布尔值而非复制后的模型数据。
解决方法
不要将save()操作的返回值赋值给模型变量,保存完成后直接返回模型实例即可,示例代码如下:
$transaction = Transaction::find(1); $transaction2 = $transaction->replicate()->fill(['status' => 1]); // 仅执行保存操作,不要覆盖模型变量 $transaction2->save(); // 直接返回保存完成的模型实例 return $transaction2;
可选优化
如果你的数据表存在数据库层面自动生成的字段(比如自增主键、默认值字段、创建/更新时间戳等),想要确保拿到的是数据库落库后的最新数据,可以在保存后调用refresh()方法刷新模型:
$transaction = Transaction::find(1); $transaction2 = $transaction->replicate()->fill(['status' => 1]); if ($transaction2->save()) { // 同步数据库落库后的最新字段值 return $transaction2->refresh(); } // 可自行补充保存失败的处理逻辑 return response()->json(['error' => '数据保存失败'], 500);
内容的提问来源于stack exchange,提问作者Blues Clues
相关产品推荐
相关产品推荐

