即使我在 laravel 中使用 updateorcreate 方法,为啥还要复制数据
Posted
技术标签:
【中文标题】即使我在 laravel 中使用 updateorcreate 方法,为啥还要复制数据【英文标题】:Why still duplicate the data even i use the updateorcreate method in laravel即使我在 laravel 中使用 updateorcreate 方法,为什么还要复制数据 【发布时间】:2021-09-27 01:05:15 【问题描述】:即使我在 laravel 中使用 updateorcreate 方法,为什么还要复制数据 对不起,我的英语不好 这是我的代码:
$customerId = Auth::id();
$unpaid = 'unpaid';
$cartTables = CartModel::where(['user_id' => $customerId, 'cart_status' => $unpaid])->get();
$addReward = array();
foreach( $cartTables as $key => $value)
$addReward[] = $request['product_id'][$key];
$datas = $request->product_id;
if(count($cartTables) == 0 || $addReward != $datas)
foreach ($request->product_id as $key => $value)
$cartData = array(
'user_id' => $customerId,
'product_id' => $request['product_id'][$key],
'product_image' => $request['product_image'][$key],
'product_name' => $request['product_name'][$key],
'product_quantity' => $request['product_quantity'][$key],
'product_price' => $request['product_price'][$key],
'cart_created_at' => new DateTime(),
'cart_status' => 'unpaid',
);
CartModel::updateOrCreate($cartData);
return redirect('product/cart');
我只想插入唯一的产品,如果有现有产品则覆盖。
【问题讨论】:
这不是updateOrCreate
的工作方式。它有两种选择,一种是检查数据库中的数据,另一种是将列更新到数据库中。
见***.com/questions/42695943/…
如何去除laravel中的重复行?
【参考方案1】:
updateOrCreate 方法接受两个数组作为参数: 第一个:更新哪个模型 第二:模型应该更新哪些数据。
在你的情况下,如果你想更新一个特定的 ID,你的代码应该是这样的(例如,不确定应该满足什么条件):
CartModel::updateOrCreate(['product_id' => $productId], $cartData);
或
CartModel::updateOrCreate(['user_id' => $customerId], $cartData);
请阅读文档,它非常清楚地解释了一切:
https://laravel.com/docs/8.x/eloquent#upserts
【讨论】:
谢谢您,先生!这对我很有帮助。以上是关于即使我在 laravel 中使用 updateorcreate 方法,为啥还要复制数据的主要内容,如果未能解决你的问题,请参考以下文章
Laravel updateOrInsert 的第一个参数可以用作 OR 而不是对值进行配对吗
Laravel Scheduler作业触发失败事件,即使它没有失败