Как добавить и обновить в одном API в Laravel - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь добавить и обновить, используя тот же API, в настоящее время я могу добавить, но мне не ясно, как обновить, используя тот же API.

Я добавляю папки против идентификатора, и мой ответ тела выглядит следующим образом:

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

Я могу добавить папки с идентификаторами 1,3 и 4 против идентификатора 2, но в следующий раз, когда я нажму на тот же API с папкой [1,3,5], он должен обновить детали папок, а не добавлять снова, я могу сделать это с помощью создание отдельного API, но я хочу сделать это в одном API.

Код моего контроллера:

 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');
    }

Ваша помощь будет высоко оценена?

Ответы [ 2 ]

0 голосов
/ 18 мая 2019

Найти запись, если существует, обновить, в противном случае создать


$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
}
0 голосов
/ 15 мая 2019

Хорошо, так что после наших комментариев в комментариях, я думаю, что вы ищете что-то вроде этого:

$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
}

Итак, таким образом, вы перебираете все свои папки.Проверьте, существует ли папка с указанным идентификатором, если нет, то создает новую.Доктор связан через doctor_id в вашей записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...