首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Laravel订货后减少数据库中的产品数量

用Laravel订货后减少数据库中的产品数量
EN

Stack Overflow用户
提问于 2016-09-20 11:50:44
回答 4查看 7.1K关注 0票数 2

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

据我所说,管理面板已经准备好,可以添加到产品的数量,这是保存在数据库中。这是我的手推车提交控制器

代码语言:javascript
运行
复制
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);中,并保存在产品等的数据库信息中

代码语言:javascript
运行
复制
{"title":"Test Product","description":"You save 25%","quantity":1,"price":135}

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

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

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-09-23 22:01:49

假设$cart是一个数组,并且基于您提供的json,您需要:

  1. 将产品id添加到$cart中,否则几乎不可能知道该订单的产品是什么
  2. 使用$cart上每个产品的产品id,您现在可以循环购物车产品并更新它们。类似于下面的代码。 公共函数orderSubmit() { $cart = Session::get(self::CART_SESSION_KEY,array());if (count($cart) < 1) {返回重定向::to(‘/’);} $validatorRules =数组( 'captcha‘=>’必需的\captcha‘);输入:merge(array_map(’trim‘,输入::all());$validator =validator::make(输入::all(),$validatorRules);if ($验证器->fails()){返回重定向::to(‘/cart/order?_$validatorRules=’)。csrf_token())->withErrors($validator->errors())->withInput(Input::except('captcha'));}\DB:;尝试{ $order =新订单();$ $order->user_id =self:$user->user_id;$order->data = json_encode($cart,true);$order->info =输入:get(‘additional_info’);$order->save();foreach ($cart as $item) { $product =$product($$product->id);$$product->减量(‘$product’,$item->quantity);}Session:put(self::CART_SESSION_KEY,数组();\DB::commit();返回重定向::to(‘/’)->with(‘message_self::CART_SESSION_KEY’,'Order created )!我们将很快与您联系,以确认您的订单细节。‘’;} catch (\ $ex) {\DB:rollback();返回重定向::to (‘/cart/ order?_token=’)。csrf_token())->withErrors($ex->getMessage())->withInput(Input::except('captcha'));}

我为事务添加了代码,以确保当订单被正确存储时,数量会减少。

票数 4
EN

Stack Overflow用户

发布于 2019-09-28 21:32:51

对于那些使用资源控制器或更简单/简单的答案的人:

代码语言:javascript
运行
复制
public function create()
{
    $stocks = Stock::all();
    //dd($stocks);
    return view('sales.create', compact('stocks'));
    //$sales = Sale::pluck('stock_id')->prepend('stock_id');
    //$sales = DB::table('stocks')->select('stock_id')->get();
    //return view('sales.create')->with('sales',$sales);
}


public function store(Request $request)
{
    $this->validate($request, [
        'stock_id' => 'required',
        'product_name' => 'required',
        'sale_quantity' => 'required',
        'unit_selling_price' => 'required',
        'total_sales_cost' => 'required'
        ]);

    //create stock
    $sale = new Sale;
    $sale->stock_id = $request->input('stock_id');
    $sale->product_name = $request->input('product_name');
    $sale->sale_quantity = $request->input('sale_quantity');
    $sale->unit_selling_price = $request->input('unit_selling_price');
    $sale->total_sales_cost = $request->input('total_sales_cost');
    $sale->stock_quantity =
        $sale->save();
    DB::table('stocks')->where('stock_name', $request->input('product_name'))->decrement('stock_quantity', $request->input('sale_quantity'));

    return redirect('/sales')->with('success', 'Sale Saved');
}
票数 2
EN

Stack Overflow用户

发布于 2021-11-11 21:11:14

我做了这件事而且工作得很完美。

代码语言:javascript
运行
复制
$check_stock = Product::where('id', $product->product_id)->first()->stock_quantity;

      if ($check_stock > 0 && $check_stock >= $product->quantity) {
        $stock = Product::where('id', $product->product_id)->decrement('stock_quantity', $product->quantity);
      }else{
        watchOut('warning', 'Opps', 'Stock shortage');
        return back();
      }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39593304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档