PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Saturday, February 12, 2022

[FIXED] How to Create Multiple input with laravel API?

 February 12, 2022     api, laravel, laravel-8     No comments   

Issue

I want to make an report API with the option of being able to do multiple inputs for violators data, crime scene photo data and personnel data.

I've tried to code like below, but still can't do multiple input. What is the correct way to create multiple inputs in laravel API (with file upload) ?

Controller

    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()]);
        }
    }

And here is how I tested in postman.

enter image description here enter image description here


Solution

Solved. i changed my code to like this and it work.

    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()]);
        }
    }


Answered By - Hilmi Hidayat
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing