Daniyal Mughees
Daniyal Mughees

Reputation: 313

How to get multiple images in laravel api?

I am creating a laravel API for complaints. This code is not saving multiple images in the database and I have to show multiple images in JSON response in an array. I am using array_get but it's not working for me. I have tried many things but it is not saving images in database. I have no idea. I am saving images in other table.

public function Complains(Request $request)
{
    $response = array();
    try {
        $allInputs = Input::all();
        $userID = trim($request->input('user_id'));
        $cordID = trim($request->input('cord_id'));
        $phone = trim($request->input('phone'));
        $address = trim($request->input('address'));
        $description = trim($request->input('description'));
     // $image = array_get($allInputs, 'image');

        $validation = Validator::make($allInputs, [
            'user_id' => 'required',
            'cord_id' => 'required',
            'phone' => 'required',
            'address' => 'required',
            'description' => 'required',
        ]);
        if ($validation->fails()) {
            $response = (new CustomResponse())->validatemessage($validation->errors()->first());
        } else {

            $checkRecord = User::where('id', $userID)->get();

            if (count($checkRecord) > 0) {

                $complainModel = new Complains();
                $complainModel->user_id = $userID;
                $complainModel->cord_id = $cordID;
                $complainModel->phone_no = $phone;
                $complainModel->address = $address;
                $complainModel->description = $description;
                $saveData = $complainModel->save();

                if ($saveData) {
                    if ($request->file('image')) {
                        $path = 'images/complain_images/';
                        // return response()->json(['check', 'In for loop']);
                        foreach ($request->file('image') as $image) {
                            $imageName = $this->uploadImage($image, $path);

                            $ImageSave = new ComplainImages();
                            $ImageSave->complain_id = $complainModel->id;
                            $ImageSave->image_url = url($path . $imageName);
                            $ImageSave->save();
                        }
                    }
                    $jsonobj = array(
                        'id' => $userID,
                        'name' => $cordID,
                        'email' => $phone,
                        'phone' => $address,
                        'description' => $description,
                    );
                    return Response::json([
                        'Exception' => "",
                        'status' => 200,
                        'error' => false,
                        'message' => "Complain Registered Successfully",
                        'data' => $jsonobj

                    ]);
                }
            }else{
                $response = (new CustomResponse())->failResponse('Invalid ID!');

            }

        }
    } catch (\Illuminate\Database\QueryException $ex) {
        $response = (new CustomResponse())->queryexception($ex);
    }
    return $response;
}

public function uploadImage($image, $destinationPath)
{
    $name = rand() . '.' . $image->getClientOriginalExtension();
    $imageSave = $image->move($destinationPath, $name);
    return $name;
}

Upvotes: 0

Views: 825

Answers (1)

Manzurul Hoque Rumi
Manzurul Hoque Rumi

Reputation: 3094

There is a mistake in looping allImages. To save multiple images try below code

foreach($request->file('image') as $image)
{
     $imageName = $this->uploadImage($image, $path);
     // other code here
}

Check if you are reaching the loop

return response()->json(['check': 'In for loop'])

Upvotes: 1

Related Questions