如何在laravel中的一个api中添加和更新

I am trying to add and update using the same API, currently, I can add but I am not clear about how to update using the same API.

I am adding folders against id and my body response looks like this:

{
    "id": "2",
    "folder_detail": [1,3,4]
}

I can add folders with id 1,3 and 4 against id 2 but next time when I hit the same API with folder[1,3,5] it should update folders details not should add again, I can do that by making separate API but I want to do that in one API.

My Controller code:

 try {

            $folder = Doctor::where('id', $request->get('id'))->first();
            $folder->doctor()->attach($request->get('folder_detail', []));

            DB::commit();

            return response([
                'status' => true,
                'message' => 'Folder detail added',
            ], 200);

        } catch (\Exception $ex) {
            DB::rollback();
            return response([
                'status' => false,
                'message' => __('messages.validation_errors'),
                'errors' => $ex->getMessage(),
            ], 500);
        }
    }

    public function doctor()
    {
        return $this->belongsToMany('App\Folder', 'folder_details');
    }

Your help will be highly appreciated?

Okay so after our back and forth in the comments I think you are looking for something like this:

$folders = $request->get('folder_detail', []);

foreach($folders as $folder) {
    $record = Folder::firstOrNew(['id', $folder]);
    $record->doctor_id = $request->id;

   // You can add your own records here, or use the 'fill' function
}

So, this way, you loop through all your folders. Check if the folder with the specific ID already exists, if it does not, it creates a new one. The doctor is linked through the doctor_id on your record.

Find record if exist then update otherwise create


$post = $request->all();

$doctor = Doctor::find($post['id']);

if($doctor){
    $doctor->update([
        //your data for update doctor model
    ]);

    //remove old folders which is related with this doctor
    Folder::where('doctor_id', $doctor->id)->delete();

    //add current data of folder
    if(!empty($post['folder_detail'])){
        foreach($post['folder_detail'] as $folder){
            Folder::create([
                'doctor_id' => $doctor->id,
                'folder_detail' => $folder
            ]);
        }
    }

    //return your response here

} else {
    $doctor = Doctor::create([
        //data for create doctore
    ]);

    //add current data of folder
    if(!empty($post['folder_detail'])){
        foreach($post['folder_detail'] as $folder){
            Folder::create([
                'doctor_id' => $doctor->id,
                'folder_detail' => $folder
            ]);
        }
    }

    //return your response here
}