如何检查记录是不是已经存在,然后在 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 在插入之前检查记录是不是存在,这是一种有效的方法