【问题标题】:How to update product quantity after order was placed in Laravel PHP在 Laravel PHP 中下订单后如何更新产品数量
【发布时间】:2019-04-21 03:16:45
【问题描述】:

Product Table

Product Attribute Table

我的邮购功能

        public function getPaymentStatus(Request $request){

        if ($result->getState() == 'approved') {
        $user_id = Auth::user()->id;
        $user_email = Auth::user()->email;

        //get shipping details
        $shippingDetails = DeliveryAddress::where(['user_email'=>$user_email])->first();

        $order = new Order;
        $order->user_id = $user_id;
        $order->user_email = $user_email;
        $order->name = $shippingDetails->name;
        $order->address = $shippingDetails->address;
        $order->city = $shippingDetails->city;
        $order->state = $shippingDetails->state;
        $order->country = $shippingDetails->country;
        $order->postcode = $shippingDetails->postcode;
        $order->mobile = $shippingDetails->mobile;
        $order->coupon_code = $coupon_code;
        $order->coupon_amount = $coupon_amount;
        $order->order_status = "New";
        $order->grand_total = Session::get('grand_total');
        $order->save();

        $order_id = DB::getPdo()->lastInsertId();

        $cartProducts = DB::table('cart')->where(['user_email'=>$user_email])->get();
        foreach($cartProducts as $pro){
            $cartPro = new OrdersProduct;
            $cartPro->order_id = $order_id;
            $cartPro->user_id = $user_id;
            $cartPro->product_id = $pro->product_id;
            $cartPro->product_code = $pro->product_code;
            $cartPro->product_name = $pro->product_name;
            $cartPro->product_size = $pro->size;
            $cartPro->product_color =  $pro->product_color;
            $cartPro->product_price = $pro->price;
            $cartPro->product_qty = $pro->quantity;
            $cartPro->save();
        }
        return redirect('/thank-you');
      }

我有一个存储产品详细信息的表“products”和存储产品库存的表“products_attribute”。我不知道如何将其链接到 products_attribute 表。请帮忙。

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    您的OrderDeliveryAddress 模型似乎已经掌握了Eloquent 模型。

    要设置ProductProduct Attribute 之间的关系,只需在Product 模型中定义关系方法:

    <?php
    
    use Illuminate\Database\Eloquent\Model;
    
    class Product extends Model
    {
        public function attributes()
        {
            return $this->hasMany('ProductAttribute');
        }
    }
    

    Eloquent 将使用蛇形大小写来确定外键的名称,在本例中为 product_id。如果您的外键定义不同,您可以指定名称作为第二个参数:

    return $this->hasMany('ProductAttribute', 'my_product_id');
    

    如果您想建立从 ProductAttributeProduct 的关系,请使用 belongsTo 方法:

    <?php
    
    use Illuminate\Database\Eloquent\Model;
    
    class ProductAttribute extends Model
    {
        public function product()
        {
            return $this->belongsTo('Product');
        }
    }
    

    您还可以指定类似于hasMany 方法的自定义外键名称:

    return $this->belongsTo('Product', 'my_product_id');
    

    要更新数量,您可以执行以下操作:

    foreach($cartProducts as $pro){
            $cartPro = new OrdersProduct;
            $cartPro->order_id = $order_id;
            $cartPro->user_id = $user_id;
            $cartPro->product_id = $pro->product_id;
            $cartPro->product_code = $pro->product_code;
            $cartPro->product_name = $pro->product_name;
            $cartPro->product_size = $pro->size;
            $cartPro->product_color =  $pro->product_color;
            $cartPro->product_price = $pro->price;
            $cartPro->product_qty = $pro->quantity;
            $cartPro->save();
    
            $product = Product::find($pro->product_id);
    
            if (null !== $product) {
                // you will need a sku or some other unique identifier
                // from your attribute to determine the correct attribute
                // to modify after your order is complete
                $attribute = $product->attributes()-where('sku', $sku)->first();
                $attribute->quantity = $attribute->quantity - $pro->quantity;
                $attribute->save();
            }
        }
    

    【讨论】:

    • 完成此操作后如何减去product_attribute 表中的库存数量?下订单后,它将在product_attribute 表中取每个$pro->quantity 和减去每个产品的库存。
    • @AdamLim 您需要找到您的产品,然后遍历您的属性,并可能使用 sku 或您拥有的任何唯一标识符作为属性,然后在找到后执行数量减法。
    • 我不知道怎么写。因为起初我是这样写的。 DB::table('productsAttribute')->where('product_id',$pro->product_id)->decrement('stock', $pro->quantity);
    • 但后来我意识到它不会像我希望的那样减去产品。你能展示如何在 foreach 语句中编写代码吗?
    • @AdamLim 我已经更新了答案,以展示你如何去更新你的属性。
    【解决方案2】:

    你应该使用关系here

    首先你创建 ProductModel 之后,您创建一种方法,例如属性 并使用 hasMany 关系 所以你可以做任何你想做的事

    【讨论】:

      猜你喜欢
      • 2016-08-16
      • 1970-01-01
      • 1970-01-01
      • 2017-01-28
      • 1970-01-01
      • 1970-01-01
      • 2020-09-05
      • 2019-08-31
      • 2020-06-30
      相关资源
      最近更新 更多