проверьте, существует ли уже запись с идентификатором пользователя, и обновите, если существует, и вставьте, если не существует, используя laravel - PullRequest
1 голос
/ 11 июля 2019

Я пытаюсь обновить запись для user_id, если она уже существует, и вставить новую запись, если она не существует для user_id в laravel:

Но мой идентификатор пользователя находится внутри $ doctorProfile ['user_id'] данные вставляются, но идентификатор пользователя вставляется как NULL:

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

          if($request->has('doctor_profile'))
        {
            $doctorProfile = $body['doctor_profile'];


                 $data_array = [

                'user_id' => $doctorProfile['user_id'],
                'medical_credentials' => 
               $doctorProfile['medical_credentials'],
                'registration_number' => 
           $doctorProfile['registration_number'],
                'registration_expiration_date' => 
          $doctorProfile['registration_expiration_date'],
                'dea_number' => $doctorProfile['dea_number'],
                'dea_expiration_date' => 
       $doctorProfile['dea_expiration_date'],
                'dea_issue_date' => $doctorProfile['dea_issue_date'],
                'npi_number' => $doctorProfile['npi_number'],
                'billing_title' => $doctorProfile['billing_title'],
                'billing_employment_type' => 
       $doctorProfile['billing_employment_type'],
                'other_employment_type' => $doctorProfile['other_employment_type'],
                'nadean_number' => $doctorProfile['nadean_number'],
                'upin' => $doctorProfile['upin'],
                'wcb_authorization' => $doctorProfile['wcb_authorization'],
                'wcb_rating_code' => $doctorProfile['wcb_rating_code'],
                'wcb_date_of_issue' => $doctorProfile['wcb_date_of_issue'],
                'hospital_privileges' => $doctorProfile['hospital_privileges'],
            ];

            $medId = MedicalIdentifiers::firstOrCreate(['user_id' => $doctorProfile['user_id']], $data_array);
            $medId->save();

        }

1 Ответ

0 голосов
/ 11 июля 2019

вы можете упростить

 if($request->has('doctor_profile'))
     MedicalIdentifiers::firstOrCreate($request->all());

firstOrCreate() проверяет все аргументы, которые должны присутствовать до его finds совпадения.Если не все аргументы совпадают, то будет создан новый экземпляр модели.

Если вы хотите проверить только определенное поле, используйте firstOrCreate(['field_name' => 'value']) только с одним элементом в массиве.Это вернет первый соответствующий элемент или создаст новый, если не найдено совпадений.

Разница между firstOrCreate() и firstOrNew():

  • firstOrCreate() будетавтоматически создать новую запись в базе данных, если не найдено совпадений.В противном случае он даст вам соответствующий элемент.
  • firstOrNew() даст вам новый экземпляр модели для работы, если не найдено совпадений, но будет сохранен в базе данных, только если вы явно сделаете это (вызывая save() на модели).В противном случае он даст вам соответствующий элемент.

Выбор между одним или другим зависит от того, что вы хотите сделать.Если вы хотите изменить экземпляр модели до того, как он будет сохранен в первый раз (например, задать имя или какое-либо обязательное поле), вы должны использовать firstOrNew().Если вы можете просто использовать аргументы для немедленного создания нового экземпляра модели в базе данных без его изменения, вы можете использовать firstOrCreate().

from: First Or Create

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