使用 Laravel 下订单后减少数据库中的产品数量

2024-01-09

我在网站上有购物车,到目前为止一切正常。现在,我正在尝试为管理员可以在后端添加的每种产品进行数量(已经完成),以及当客户订购产品以减少数据库中的数量时。

到目前为止,管理面板已准备就绪,可以向保存在数据库中的产品添加数量。这是我的购物车提交控制器

public function orderSubmit() {
    $cart = Session::get(self::CART_SESSION_KEY, array());
    if (count($cart) < 1) {
        return Redirect::to('/');
    }

    $validatorRules = array(
        'captcha' => 'required|captcha'      
    );

    Input::merge(array_map('trim', Input::all()));
    $validator = Validator::make(Input::all(), $validatorRules);

    if ($validator->fails()) {
        return Redirect::to('/cart/order?_token=' . csrf_token())->withErrors($validator->errors())->withInput(Input::except(['captcha']));
    }

    $order = new Order();
    $order->user_id = self::$user->user_id;
    $order->data = json_encode($cart, true);
    $order->info = Input::get('additional_info');

    $order->save();
    Session::put(self::CART_SESSION_KEY, array());

    return Redirect::to('/)->with('message_success', 'Order created! We will contact you shortly to confirm your order details.');
}

购物车保存在$order->data = json_encode($cart, true);并在产品等的数据库信息中查找

{"title":"Test Product","description":"You save 25%","quantity":1,"price":135}

如果有多个产品按顺序排列,上面的数组也会有它们。

我无法理解的是如何提取订购的产品以及从中提取的件数,以便稍后更新每个产品的数据库数量字段?

我什至不知道从哪里开始。


假设$cart是一个数组,根据您提供的 json,您需要:

  1. 将产品 ID 添加到$cart否则几乎不可能知道该订单的产品是什么
  2. 带有每个产品的产品 ID$cart,您现在可以循环购物车产品并更新它们。像下面的代码一样。

    public function orderSubmit() {
        $cart = Session::get(self::CART_SESSION_KEY, array());
        if (count($cart) < 1) {
            return Redirect::to('/');
        }
    
        $validatorRules = array(
            'captcha' => 'required|captcha'      
        );
    
        Input::merge(array_map('trim', Input::all()));
        $validator = Validator::make(Input::all(), $validatorRules);
    
        if ($validator->fails()) {
            return Redirect::to('/cart/order?_token=' . csrf_token())->withErrors($validator->errors())->withInput(Input::except(['captcha']));
        }
        \DB::beginTransaction();
    
        try {
            $order = new Order();
            $order->user_id = self::$user->user_id;
            $order->data = json_encode($cart, true);
            $order->info = Input::get('additional_info');
    
            $order->save();
    
            foreach ($cart as $item) {
                $product = Product::find($item->id);
                $product->decrement('votes', $item->quantity);
            }
    
            Session::put(self::CART_SESSION_KEY, array());
    
            \DB::commit();
    
            return Redirect::to('/')->with('message_success', 'Order created! We will contact you shortly to confirm your order details.');
        } catch (\Exception $ex) {
            \DB::rollback();
    
            return Redirect::to('/cart/order?_token=' . csrf_token())->withErrors($ex->getMessage())->withInput(Input::except(['captcha']));
        }
    }
    

我添加了交易代码,以确保订单正确存储时数量会减少。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Laravel 下订单后减少数据库中的产品数量 的相关文章

  • 确定 PHP 到目前为止执行了多长时间

    我需要确定 PHP 函数到目前为止已经运行了多长时间 有哪些选项可以确定某些 PHP 代码的运行时间 我正在使用 zend 框架 Call microtime true 函数以毫秒分辨率获取当前时间
  • 通过 PEAR 安装 PHPUnit

    我安装时遇到问题PHPUnit 3 4 6 via 梨1 9 0 当我发现频道后pear phpunit de并尝试使用以下命令之一 pear 安装 phpunit PHPUnit pear 安装 alldeps phpunit PHPUn
  • Laravel 5.7:维护模式的自定义刀片模板,但不是 503.blade.php

    每次php artisan down开启后 Laravel 显示 503 页面 好的 我可以通过创建名为的新文件来自定义它503 blade php inside resources views errors 关键是 我在任何时候都不认为维
  • 如何从文件中获取整个函数

    好的 我现在正在逐行阅读一个文件 我知道文件中的每个函数名称 因为它是在 XML 文档中的其他位置定义的 应该是这样的 function function name 其中 function name 是函数的名称 我从 XML 文档中获取所
  • Mysql关于重复键更新+子查询

    使用这个问题的答案 需要 MySQL INSERT SELECT 查询具有数百万条记录的表 https stackoverflow com questions 662877 need mysql insert select query fo
  • 不区分大小写的 array_unique

    我正在尝试编写几行代码来创建一个不区分大小写的数组唯一类型函数 这是我到目前为止所拥有的 foreach topics as value lvalue strtolower value uvalue strtolower value if
  • Chart.js - 使用 mysql 和 php 从数据库获取数据

    我正在尝试将静态数据转换为使用数据库结果 我将使用MySQL and PHP 示例代码 var randomScalingFactor function return Math round Math random 100 var lineC
  • 关于 Cassandra 与 MySQL 的一些建议

    几天前我在这里问了一个问题 得到了一些非常好的答案 我正在考虑做一个带有个人资料 个人简介等的facebook风格的网站 并询问我是否应该使用mysql 答案是使用Cassandra 因为好多了 我只是问这是每个人都会建议的 只是我对mys
  • WordPress 子主题覆盖父主题包括

    我正在创建 WordPress 子主题 需要覆盖某些小部件模板 我正在尝试使用此方法来覆盖父主题调用 覆盖主题功能的正确方法 http www venutip com content right way override theme fun
  • 如何处理致命错误:cURL错误7:无法连接到xxxx端口443

    我有一个连接到第三方 API 的脚本 它是并且应该在 24 7 不间断循环上运行 我在重新启动循环之前在最后使用睡眠 问题是 有时第三方 API 会被拒绝 或者连接会因以下错误而中断 致命错误 未捕获的异常 GuzzleHttp Ring
  • 如何下载临时文件

    我正在尝试创建一个简短的 PHP 脚本 该脚本采用 JSON 字符串 将其转换为 CSV 格式 使用fputcsv 并使该 CSV 可作为下载的 csv 文件使用 我的想法是使用tmpfile 不用担心 cronjobs 或磁盘空间不足 但
  • 如何限制两个表之间一对多关系中的多个数量?

    我有一个带有两个 MySql 表的 MySQL 数据库 第一个是第一个表 表 A 有一列具有唯一值 从值 从 1 到 n 在第二个表 2 表 B 中 我有两列 在第一个表中我有一个名称 在第二个我的值从 1 到 n 如果我在 中添加一个值
  • ElasticSearch 和 PHP 中的多个字段搜索

    我正在使用最新版本弹性搜索 PHP https github com elasticsearch elasticsearch php以及最新版本的 MongoDB 和 ElasticSearch 我需要对可以包含一个或多个值的多个字段进行搜
  • 使用多个 WHERE 子句更新 Codeigniter 中的批次

    我查看了 CI 用户指南来了解如何处理update batch 并且它似乎只接受一个索引来匹配要更新的行 但在我的例子中 我需要指定两个索引 例如lang and id page我一起用作索引 这样的lang en id page 115是
  • 检查字符串是否编码为 UTF-8

    function seems utf8 str length strlen str for i 0 i lt length i c ord str i if c lt 0x80 n 0 0bbbbbbb elseif c 0xE0 0xC0
  • 当php脚本通过ajax运行时显示进度条

    我有一个通过 ajax 向服务器提交值的表单
  • 为什么 0.5 mod 0.1 在不同的编程语言中结果不同?

    我有一个关于模数的问题 模运算求一个数除以另一个数的余数 我原本期望 0 5 0 1 0 的结果 但是当我在 PHP 或 net 中运行它时 我得到 0 1 我运行的 php 代码是 var dump fmod 0 5 0 1 在 net中
  • Yii2:无法将列值更新+1

    创建新记录时 我需要将列值更新 1 public function actionCreate model new CreateBookings if model gt load Yii app gt request gt post Yii
  • Unicode(希腊语)字符存储在数据库中,例如“??????”

    数据库中的希腊字符就像问号 我找不到解决办法 我使用 Java Swing 开发了一个应用程序 但是当我在 MySQL 中插入希腊字母时 就像问号一样 我将数据库排序规则更改为 utf8 并将列也更改为 utf8 我的项目编码设置为UTF
  • 无法将句子插入数据库

    我有一些句子 我必须选择由 6 个以上单词组成的句子 然后它们将被插入到数据库中

随机推荐

  • 在撰写中禁用横向模式

    如何禁用可组合函数的横向模式 我想始终以纵向模式显示可组合项 PS 无法在活动的清单文件中设置它 因为我只希望此行为适用于一个可组合项 而不适用于活动中的其他可组合项 你可以这样做DisposableEffect 活动requestedOr
  • 线程:PyQt 因“出队时队列中存在未知请求”而崩溃

    我正在开发的应用程序的一部分需要向一小群人发送一些电子邮件 由于连接到 SMTP 服务器并发送电子邮件可能需要一些时间 因此我想在此操作期间使用后台线程来提供一个进度条来完成这项工作 现在发生的情况是 我可以实现一个工作得很好的测试结构 但
  • PHP 中如何判断 value 是否为日期

    我正在使用 PHP 中的值数组 其中一些值可能包括各种字符串格式的日期 我需要将多种格式的日期转换为它们的等效数字 Unix 时间戳 问题是能够确定字符串是否是日期 Using if timestamp strtotime str fals
  • Android:加密密码[重复]

    这个问题在这里已经有答案了 可能的重复 存储密码 https stackoverflow com questions 5359399 storing a password 我正在使用共享首选项来存储密码 按原样保存密码数据是否安全 或者我必
  • Three.js 中的渐进式加载/LOD/流网格

    我正在使用 STL 加载器将 stl 文件加载到 Three js 场景中 这些 stl 文件的大小从 5mb 到 50mb 不等 有没有一种方法可以用来在模型加载时逐步加载 流式传输 提高细节级别 不确定术语是否正确 以便我的用户在出现任
  • R 按组总和总结给出 NA

    我有一个像这样的数据框 Observations 2 190 835 Variables 13 patientid
  • Angular 2 自定义复合控件

    我正在尝试为 Angular 2 创建一个自定义复合控件 我的要求是我需要创建一个允许用户选择文件的通用文件选择器控件either使用 html5 输入 类型 文件 or通过输入文件的 url 我决定创建通用表单控件 为两个子控件实现 Co
  • 何时对卷积层使用什么类型的填充?

    我知道当我们在神经网络中使用卷积层时 我们通常使用填充并且主要使用恒定填充 例如零填充 并且有不同类型的填充 例如对称 反射 恒定 但我不确定使用不同填充方法的优点和缺点以及何时使用哪一种 这实际上取决于神经网络的用途的情况 我不会告诉它的
  • Bootstrap 表 - 无法在 tr 上添加点击事件

    我正在使用 Bootstrap 表 http wenzhixin net cn p bootstrap table docs index html http wenzhixin net cn p bootstrap table docs i
  • AOP 围绕外部库的重写方法?

    我正在寻找以下问题的实用解决方案 外部库提供组件作为基类 自定义组件是通过扩展这些基类来创建的 当实现抛出未处理的异常时 基类就会中断 基类源代码不可用 只有一个二进制罐子 我正在寻找的是一个通用的 AOP 错误处理建议 它将包装每个方法的
  • 如何使用 React 前端将 favicon 添加到 django 应用程序

    我正在构建一个带有 React 前端的 Django 应用程序 使用 React create app 构建 我无法让图标出现在生产中 我正在使用 Django 2 10 0 当我构建 React 应用程序时 构建输出文件将放在 asset
  • Visual Studio 2013 与 2010 项目兼容吗?

    VS2012 可以打开 VS2010 项目并使它们处于可在 VS2010 中使用的状态 VS2013有同样的功能吗 如果允许 Visual Studio 自动升级项目 则可以在 Visual Studio 2013 Visual Studi
  • 从 Android 应用程序登录网页

    我正在努力做到这一点 我真的需要有经验的朋友的帮助 带有 2 个文本框的应用程序 一份用于用户名 一份用于密码 登录按钮 当用户按下按钮时 登录信息将发送到网页 m bonbon hr 并在浏览器中打开该网页 首次登录后 登录信息将被保存
  • 找不到接口 java.util.List Rest API Spring boot 的主要或默认构造函数

    我将请求正文传递给邮递员上的 POST 请求 类似于以下内容 name Mars artifacts elements name carbon amount 0 5 measurement g typeName typeA elements
  • 使用 ShouldBeEquivalentTo 并处理不同的名称

    我想做一个映射器测试 将数据库模型映射到 dto 数据库模型中有 class Order long Id 但在 Dto 上 同一个字段被命名为 class OrderDto long OrderId 使用 ShouldBeEquivalen
  • PayPal 和 Parse 冲突

    尝试使用 PayPal iOS SDK 使其能够仅与 Paypal 集成一起工作 但是当我尝试添加任何解析所需的框架 例如 Parse framework Boltz framework 和 ParseFacebookUtils frame
  • 使用宏将 import 语句粘贴到 thunk 前面

    触发于这个问题 https stackoverflow com questions 18535356 multiple late initialisation 我想知道是否可以编写一个 def macro 来实现结果 import scal
  • 对于 OpenXML Excel 文档,MemoryStream 为空

    我通常会使用 ClosedXML 生成 Excel 文件 核心项目迫使我只使用 OpenXML 将下载生成的 Excel 文件 我遇到一个问题 即提供给 SpreadsheetDocument 的内存流为空 我尝试了多种方法来生成流 下面的
  • node.js:在成功验证 get 请求后提供文件(特别是 apk)

    好吧 我正在尝试在成功验证 get 请求后使用 node js 提供 apk 文件 为此 我使用以下形式的 api 调用 GET apk username user token a token goes here 请注意 实际的身份验证是通
  • 使用 Laravel 下订单后减少数据库中的产品数量

    我在网站上有购物车 到目前为止一切正常 现在 我正在尝试为管理员可以在后端添加的每种产品进行数量 已经完成 以及当客户订购产品以减少数据库中的数量时 到目前为止 管理面板已准备就绪 可以向保存在数据库中的产品添加数量 这是我的购物车提交控制