laravel 中如何检查记录是否已存在然后更新或插入?

Sou*_*der 1 php mysql laravel

我想首先检查数据是否已经存在。如果数据已经存在,则更新函数,否则插入新记录。插入新记录时它可以工作,但我不想将来出现重复的行。

    public function store(Request $request)
    {
        $requestData = $request->all();
        
            $jobseeker = new Jobseeker();
            $jobseeker->fullname= $requestData['full name'];
            $jobseeker->gender= $requestData['Gender'];
            $jobseeker->messenger_user_id= $request->{'messenger user id'};
            $jobseeker->save();
    }
Run Code Online (Sandbox Code Playgroud)

这是我尝试的方法,我检查信使用户 ID 是否已经存在,如果信使用户 ID 已经存在,我想更新现有行,否则我想插入新行。

    public function store(Request $request,$messenger_user_id)
    {
        $requestData = $request->all();

        $my_msg_id = Jobseeker::where('messenger_user_id',$requestData['messenger user id'])->first();
        
        if (is_null($my_msg_id)) {
          $jobseekers = Jobseeker::find($messenger_user_id);
          $jobseeker->fullname= $requestData['full name'];
          $jobseeker->gender= $requestData['Gender'];
          $jobseeker->messenger_user_id= $request->{'messenger user id'};
        }
        else{
            $jobseeker = new Jobseeker();
            $jobseeker->fullname= $requestData['full name'];
            $jobseeker->gender= $requestData['Gender'];
            $jobseeker->messenger_user_id= $request->{'messenger user id'};
            $jobseeker->save();
        }

    }
Run Code Online (Sandbox Code Playgroud)

Dee*_*eva 5

您不需要在 Laravel 中自己完成所有这些工作。使用方法firstOrCreate

$data_array = [
    'full_name' => $requestData['full name'],
    'gender' => $requestData['Gender'],
];

$jobseeker = App\Jobseeker::firstOrCreate(['messenger_user_id' => $messenger_user_id], $data_array);
Run Code Online (Sandbox Code Playgroud)

它使用数组作为第一个参数来查找模型,使用数组作为第二个参数来更新该数组中给定键值的记录,或者它将使用给定数据创建一个新记录,然后返回模型对象。