商品添加购物车

首先封装购物车类

class CartBusiness
{
    // 商品添加购物车
    public static function addCart($goods_id,$goodsSpecId,$number,$is_selected){
        // 判断是否登录
        if (session('?userInfo')){
            // 登录存入数据库
            $user_id=session('userInfo.id');
            // 查询用户是否有这件商品
            $cart=Cart::where('goods_id',$goods_id)
                ->where('spec_goods_id',$goodsSpecId)
                ->where('user_id',$user_id)
                ->find();
            if (!$cart){
                $cart_arr=[
                    'number'=>$number,
                    'user_id'=>$user_id,
                    'goods_id'=>$goods_id,
                    'spec_goods_id'=>$goodsSpecId,
                    'is_selected'=>$is_selected
                ];
                Cart::create($cart_arr);
            }else{
                // 购物车已有此商品
                $cart_data['number']=$cart['number']+$number;
                Cart::update($cart_data,['id'=>$cart['id']]);
            }
        }else{
            // 未登录存入cookie
            $cart=cookie('cart')?:[];
            // 组装存储cookie的键
            $key=$goodsSpecId;
            // 判断是否是第一次添加数组
            if (is_array($cart)){
                $cart["$key"]=[
                    'number'=>$number,
                    'is_selected'=>$is_selected,
                    'goods_id'=>$goods_id,
                    'spec_goods_id'=>$goodsSpecId
                ];
                // 放入cookie中
                \cookie('cart',serialize($cart));
                return true;
            }
            // 判断cookie中是否有同类型商品
            $cart_arr=unserialize($cart);
            if (isset($cart_arr["$key"])){
                // 购物车中有这件商品 更改商品类型
                $cart_arr[$key]['number']+=$number;
            }else{
                $cart_arr["$key"]=[
                    'number'=>$number,
                    'is_selected'=>$is_selected,
                    'goods_id'=>$goods_id,
                    'spec_goods_id'=>$goodsSpecId
                ];
            }
            cookie('cart',serialize($cart_arr));

        }
    }
    // 获取购物车中所有商品
    public static function getCart(){
        // 检测是否登陆
        if (session('?userInfo')){
            $user_id=session('userInfo.id');
            $data=Cart::getInfo($user_id)->toArray();
            return $data;
        }else{
            // 从cookie中取出cart数组
            $cart=cookie('cart')?:[];
            // 证明当前访问者购物车数据为空
            if (empty($cart)){
                return [];
            }
            // 将序列化的结果转换为数组
            $cart_arr=unserialize($cart);
            // 返回结果
            return array_values($cart_arr);
        }
    }
    // 将cookie中的值迁移至数据库
    public static function cookieToDb(){
        // 取出cookie值
        $cart=cookie('cart')?:[];
        if (empty($cart)){
            return [];
        }
        $cart_arr=unserialize($cart);
        // 向数组中追加user_id
        foreach ($cart_arr as &$val){
            self::addCart($val['goods_id'],$val['spec_goods_id'],$val['number'],$val['is_selected']);
        }
        cookie('cart',null);
    }
}

接收前段商品数据渲染商品添加购物车页面

 public function cart(Request $request){
        // 接收数据
        $post=$request->post();
        // 数据入库
        CartBusiness::addCart($post['goods_id'],$post['spec_goods_id'],$post['number'],$is_selected=1);
        // 添加商品的信息
        $data=\app\api\model\Goods::getGoodsSpec($post['goods_id'],$post['spec_goods_id']);
        return view('success',compact('data'));
    }

渲染购物车中所有商品信息

// 购物车商品  渲染购物车中所有商品信息
    public function gocart(){
        $cartData=CartBusiness::getCart();
        foreach ($cartData as $key=>&$val){
            $val['goods']=\app\api\model\Goods::getGoodsSpec($val['goods_id'],$val['spec_goods_id']);
        }
        unset($val);
        return view('cart',compact('cartData'));
    }

posted @ 2021-12-30 11:49  哎呀呀哈  阅读(23)  评论(0)    收藏  举报  来源