Php Laravel store multiple只保存一个
我正在向控制器发送数据数组,但它只将1行保存到数据库,我需要保存多行(取决于数组长度) 代码Php Laravel store multiple只保存一个,php,laravel,Php,Laravel,我正在向控制器发送数据数组,但它只将1行保存到数据库,我需要保存多行(取决于数组长度) 代码 控制器 public function store(Request $request) { $user = Auth::guard('api')->user(); $transit = new Transit; foreach($request->input('serials') as $serial){ //looping my serials array for
控制器
public function store(Request $request)
{
$user = Auth::guard('api')->user();
$transit = new Transit;
foreach($request->input('serials') as $serial){ //looping my serials array for each row
if(!empty($serial['barcode_id'])) { // filter out empty objects from array
$barcode = Barcode::where('serial_number', $serial['barcode_id'])->orWhere('u_serial_number', $serial['barcode_id'])->first();
$transit->barcode_id = $barcode['id'];
$transit->transNu = mt_rand(1000000000, 9999999999);
}
}
$transit->from_id = $request->input('from_id');
$transit->to_id = $request->input('to_id');
$transit->sender_id = $user->id;
$transit->description = $request->input('description');
if($transit->save()){
DB::table('outlet_products')->where('barcode_id', $transit->barcode_id)->update(['outlet_id' => null]);
}
return response()->json([
'data' => $transit,
'message' => 'Transit data saved successfully.'
]);
}
截图
请求数据
存储的数据
有什么想法吗?移动
$transit=新中转在foreach中编写>并在返回响应之前结束foreach循环
当前设置中的情况是,在第一次迭代期间,将创建一个transit对象,当保存该对象时,它将获得一个id。因此,对于第二次/后续迭代,transit对象将具有一个id
,调用save将对具有该id的记录执行更新
操作
将其移动到foreach内部将始终为您提供一个新的空传输对象,保存将为您提供一个新记录。Move$Transit=new Transit在foreach中编写>并在返回响应之前结束foreach循环
当前设置中的情况是,在第一次迭代期间,将创建一个transit对象,当保存该对象时,它将获得一个id。因此,对于第二次/后续迭代,transit对象将具有一个id
,调用save将对具有该id的记录执行更新
操作
将其移动到foreach内部将始终为您提供一个新的空Transit
对象,保存将为您提供一条新记录。如果我没有遗漏什么,则save
似乎位于foreach外部。只有两个项目中的最后一个未被过滤的项目将被保存。正如我所看到的,您在创建对象后只保存了一次。您能确认吗?$barcode->save()
丢失,但实际上您只调用了“$barcode=barcode::where…”,但没有在此处插入任何数据。让我们通过移动$transit=new transit来检查代码>内部foreach以及。在返回响应之前,将foreach结尾移到右侧。@user3532758我刚刚这样做了,效果很好:)谢谢如果我没有遗漏什么,save
似乎在foreach之外。只有两个项目中的最后一个未被过滤的项目将被保存。正如我所看到的,您在创建对象后只保存了一次。您能确认吗?$barcode->save()
丢失,但实际上您只调用了“$barcode=barcode::where…”,但没有在此处插入任何数据。让我们通过移动$transit=new transit来检查代码>内部foreach以及。在返回响应之前,将foreach的结尾移到右边。@user3532758我刚刚这样做了,效果很好:)谢谢