field("c.*,GROUP_CONCAT(sp.name,':',sv.value order by sp.id asc) sku_attr") ->with([ 'Goods' => function ($query) { $query->where('status', 'normal'); }, 'Sku' ]) ->alias('c') ->join('shop_goods_sku sku', 'c.goods_sku_id=sku.id', 'LEFT') ->join('shop_goods_sku_spec p', "FIND_IN_SET(p.id,sku.sku_id)", 'LEFT') ->join('shop_spec sp', 'sp.id=p.spec_id', 'LEFT') ->join('shop_spec_value sv', 'sv.id=p.spec_value_id', 'LEFT') ->where(function ($query) use ($ids) { if ($ids) { $query->where('c.id', 'in', $ids); } }) ->where('c.user_id', $user_id) ->order('c.createtime desc') ->group('c.id') ->select(); } /** * 添加商品到购物车 * * @param string $goods_id 商品ID * @param string $goods_sku_id 商品SKUID * @param int $nums 数量 * @param int $user_id 会员ID * @return mixed */ public static function push($goods_id, $goods_sku_id, $nums = 1, $user_id = 0) { $row = (new self)->where('goods_id', $goods_id) ->where('goods_sku_id', $goods_sku_id) ->where('user_id', $user_id) ->find(); //已存在,数量加 if ($row) { $row->setInc('nums', $nums); } else { $row = (new self); $row->save([ 'goods_id' => $goods_id, 'goods_sku_id' => $goods_sku_id, 'user_id' => $user_id, 'nums' => $nums ]); } return $row->id; } /** * 清空购物车 */ public static function clear($cart_ids) { self::where('id', 'IN', $cart_ids)->delete(); } public function Goods() { return $this->belongsTo('Goods', 'goods_id', 'id', [], 'LEFT'); } public function Sku() { return $this->belongsTo('Sku', 'goods_sku_id', 'id', [], 'LEFT'); } }