Laravel 存储多个只保存一个

我正在向控制器发送数据数组,但它只将 1 行保存到数据库,我需要保存多行(取决于数组长度)。


代码

controller


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.'

    ]);

}

截屏

request data

https://img1.sycdn.imooc.com/6533879e000156c104930396.jpg

stored data

https://img1.sycdn.imooc.com/653387b0000114d012100135.jpg


暮色呼如
浏览 74回答 1
1回答

慕容森

移动$transit = new Transit;到 foreach 内部,并在返回响应之前结束 foreach 循环。当前设置中发生的情况是,在第一次迭代期间,创建了一个交通对象,并且在保存它时,它将获得一个 id。因此,对于第二次和后续迭代,Transit 对象将具有一个id并且调用 save 将对update具有该 id 的记录执行操作。将它移到 foreach 中总会给你一个新的空Transit对象,保存会给你一个新记录。
打开App,查看更多内容
随时随地看视频慕课网APP