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

Posted

技术标签:

【中文标题】如何检查记录是不是已经存在,然后在 laravel 中更新或插入?【英文标题】:How to check if record is already exists and then update or insert in laravel?如何检查记录是否已经存在,然后在 laravel 中更新或插入? 【发布时间】:2018-02-25 06:59:03 【问题描述】:

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

    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();
    

这是我尝试的方法,我检查 messenger 用户 id 是否已经存在,如果 messenger 用户 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();
        

    

【问题讨论】:

你听说过 laravel 中的 firstOrCreate/ firstOrNew 方法吗?在此处查看文档laravel.com/docs/5.5/eloquent#inserts 嗨,是的,我以前听说过,为什么? 那么最好用这些方法解决你的问题 firstOrCreate([], []) 方法将完成这项工作.. 它需要 2 个参数,第一个是您要查询的字段数组(其中参数),第二个是您的数据数组想插入..所以基本上如果不存在行,它将创建一个新行,否则它将更新该行.. 【参考方案1】:

你不需要在 laravel 中自己做所有这些。使用方法firstOrCreate

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

$jobseeker = App\Jobseeker::firstOrCreate(['messenger_user_id' => $messenger_user_id], $data_array);

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

【讨论】:

以上是关于如何检查记录是不是已经存在,然后在 laravel 中更新或插入?的主要内容,如果未能解决你的问题,请参考以下文章

laravel 在插入之前检查记录是不是存在,这是一种有效的方法

检查 Laravel 5.5 中是不是存在记录 [关闭]

检查 Laravel 中是不是存在记录不起作用

在创建新记录之前如何检查记录是不是已经存在?

Nodejs,AWS Dynamodb如何在创建新记录之前检查用户是不是已经存在

检查文件夹是不是已经存在,如果没有在 laravel 中通过 id 创建一个新文件夹