如何使用 laravel API 创建多个输入?

How to Create Multiple input with laravel API?

我想做一份报告API,可以选择对违法者数据、犯罪现场照片数据和人员数据进行多项输入。

我试过如下编码,但仍然无法进行多输入。在 laravel API(带文件上传)中创建多个输入的正确方法是什么?

控制器

    public function store(ReportRequest $request)
    {
        try {
            
            $report = Report::create([
                'category_id'       => $request->category_id,
                'user_id'           => Auth::user()->id,
                'title'             => $request->title,
                'description'       => $request->description,
                'incident_date'     => $request->incident_date,
                'injured_victims'   => $request->injured_victims,
                'survivors'         => $request->survivors,
                'dead_victims'      => $request->dead_victims,
                'location'          => $request->location,
                'latitude'          => $request->latitude,
                'longitude'         => $request->longitude
            ]);

            if ($request->category_id !== 4 && $request->violator_photo) {

                $violators = $request->file('violator_photo'); 
                $violators = [];

                foreach($violators as $key => $value) {
                    
                    if($request->hasFile('violator_photo')) {
                        $violator_photo = $request->hasFile('violator_photo');
                        $fileName       = time().'_'.$violator_photo[$key]->getClientOriginalName();
                        $filePath       = $violator_photo[$key]->storeAs('images/pelanggar', $fileName, 'public');
                    }

                    $data = new Violator();
                    $data->report_id = $report->id;
                    $data->name      = $request->violator_name[$key];
                    $data->photo     = $filePath[$key];
                    $data->age       = $request->violator_age[$key];
                    $data->phone     = $request->violator_phone[$key];
                    $data->save();
                }
            }

            $files = $request->file('crime_scene_photo'); 
            $files = [];

            foreach($files as $key => $value) {
                
                if($request->hasFile('crime_scene_photo')) {
                    $crime_scene_photo  = $request->hasFile('crime_scene_photo');
                    $name               = time().'_'.$crime_scene_photo[$key]->getClientOriginalName();
                    $path               = $crime_scene_photo[$key]->storeAs('images/tkp', $name, 'public');
                }

                $data = new CrimeScenePhoto();
                $data->report_id    = $report->id;
                $data->path         = $path[$key];
                $data->caption      = $request->caption[$key];
                $data->save();
            }

            if (\Auth::user()->unit_id == 2 && $request->personel) {
                foreach ($request->personel as $key => $value) {
                    $report->members()->sync($request->personel[$key]);
                }
            }
        
            return response()->json([
                'status' => '200',
                'message' => 'success',
                'data' => [
                    $report,
                    $request->all()
                ],
            ]);
        } catch (\Exception$err) {
            return $this->respondInternalError([$err->getMessage(), $request->all()]);
        }
    }

这是我在邮递员中的测试方式。

已解决。我将我的代码更改为这样并且它有效。

    public function store(ReportRequest $request)
    {
        try {
            
            $report = Report::create([
                'category_id'       => $request->category_id,
                'user_id'           => Auth::user()->id,
                'title'             => $request->title,
                'description'       => $request->description,
                'incident_date'     => $request->incident_date,
                'injured_victims'   => $request->injured_victims,
                'survivors'         => $request->survivors,
                'dead_victims'      => $request->dead_victims,
                'location'          => $request->location,
                'latitude'          => $request->latitude,
                'longitude'         => $request->longitude
            ]);

            if ($request->hasFile('violator_photo')) {
                foreach($request->file('violator_photo') as $key => $value) {
                        
                        $vio_photo  = $request->file('crime_scene_photo');
                        $fileName   = time().'_'.$vio_photo[$key]->getClientOriginalName();
                        $filePath   = $vio_photo[$key]->storeAs('images/pelanggar', $fileName, 'public');    

                    Violator::create([
                        'report_id' => $report->id,
                        'name'      => $request->violator_name[$key] ?? null,
                        'photo'     => $filePath ?? null,
                        'age'       => $request->violator_age[$key] ?? null,
                        'phone'     => $request->violator_phone[$key] ?? null
                    ]);
                }
            }

            if ($request->hasFile('crime_scene_photo')) {
                foreach($request->file('crime_scene_photo') as $key => $value) {
                    
                        $crime_scene_photo  = $request->file('crime_scene_photo');
                        $name               = time().'_'.$crime_scene_photo[$key]->getClientOriginalName();
                        $path              = $crime_scene_photo[$key]->storeAs('images/tkp', $name, 'public');

                    CrimeScenePhoto::create([
                        'report_id' => $report->id,
                        'path'      => $path ?? null,
                        'caption'   => $request->caption[$key] ?? null
                    ]);
                }
            }

            if (\Auth::user()->unit_id == 2 && $request->personel_id) {
                foreach ($request->personel_id as $key => $value) {
                    $report->members()->attach($request->personel_id[$key]);
                }
            }
        
            return response()->json([
                'status' => '200',
                'message' => 'success',
                'data' => [
                    $report, $report->members, $report->violators, $report->photos
                ],
            ]);
        } catch (\Exception$err) {
            return $this->respondInternalError([$err->getMessage(), $request->all()]);
        }
    }