根据用户ID检查记录是否已经存在,并更新是否存在,如果不存在则插入-使用laravel

时间:2019-07-11 08:18:46

标签: php laravel authentication

我正在尝试根据user_id更新记录(如果已存在),如果不存在,则针对laravel中的user_id插入新记录:

但是我的用户ID在$ doctorProfile ['user_id']内部 数据正在插入,但用户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 :(得分:0)

您可以轻松完成

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

firstOrCreate()检查在finds匹配之前是否存在所有参数。如果并非所有参数都匹配,则将创建该模型的新实例。

如果您只想检查特定的字段,请对阵列中仅一项使用firstOrCreate(['field_name' => 'value'])。这将返回第一个匹配项,如果找不到匹配项,则创建一个新项。

firstOrCreate()firstOrNew()之间的区别:

  • firstOrCreate()将自动在 数据库,如果找不到匹配项。否则会给你 匹配的项目。
  • firstOrNew()将为您提供一个新的模型实例,以便在以下情况下使用 找到不匹配的内容,但仅在以下情况下保存到数据库中 您明确地这样做(在模型上调用save())。否则 将为您提供匹配的商品。

在一个或另一个之间进行选择取决于您要执行的操作。如果要在首次保存之前修改模型实例(例如,设置名称或某些必填字段),则应使用firstOrNew()。如果您可以仅使用参数立即在数据库中创建新的模型实例而无需对其进行修改,则可以使用firstOrCreate()。

来自:First Or Create