即使我在 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 后视图也不刷新

Laravel updateOrInsert 的第一个参数可以用作 OR 而不是对值进行配对吗

Laravel Scheduler作业触发失败事件,即使它没有失败

Laravel - 会话数据在注销/登录后仍然存在,即使对于不同的用户也是如此

为啥即使模型名称在 Laravel 上是复数,它也能工作?

使用自定义中间件会将我重定向到 /home,即使 Laravel 中的中间件是空的