位置: 文档库 > PHP > 文档下载预览

《PHP商城开发中常用的SKU管理功能代码示例整理.doc》

1. 下载的文档为doc格式,下载后可用word或者wps进行编辑;

2. 将本文以doc文档格式下载到电脑,方便收藏和打印;

3. 下载后的文档,内容与下面显示的完全一致,下载之前请确认下面内容是否您想要的,是否完整.

点击下载文档

PHP商城开发中常用的SKU管理功能代码示例整理.doc

《PHP商城开发中常用的SKU管理功能代码示例整理》

在电商系统开发中,SKU(Stock Keeping Unit)管理是商品管理的核心功能之一。它通过唯一标识商品的不同属性组合(如颜色、尺寸、规格等),实现库存精准控制、价格差异化管理和订单处理优化。本文将围绕PHP商城开发中的SKU管理功能,从数据库设计、核心功能实现到前端交互,提供完整的代码示例和实现思路。

一、SKU管理的基础概念

SKU是电商系统中对商品属性的最小可售单元的标识。例如,一件T恤可能有“红色-S码”“蓝色-M码”等不同SKU,每个SKU对应独立的库存、价格和条形码。SKU管理的核心目标包括:

  • 实现商品属性的组合管理
  • 支持动态价格和库存更新
  • 优化订单处理和库存预警

二、数据库设计

SKU管理需要设计三张核心表:商品表(products)、属性表(product_attributes)和SKU表(product_skus)。

1. 商品表(products)

CREATE TABLE `products` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL COMMENT '商品名称',
  `category_id` int(11) NOT NULL COMMENT '分类ID',
  `base_price` decimal(10,2) NOT NULL COMMENT '基础价格',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

2. 属性表(product_attributes)

CREATE TABLE `product_attributes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `product_id` int(11) NOT NULL COMMENT '商品ID',
  `attribute_name` varchar(50) NOT NULL COMMENT '属性名(如颜色)',
  `attribute_value` varchar(50) NOT NULL COMMENT '属性值(如红色)',
  PRIMARY KEY (`id`),
  KEY `product_id` (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

3. SKU表(product_skus)

CREATE TABLE `product_skus` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `product_id` int(11) NOT NULL COMMENT '商品ID',
  `sku_code` varchar(20) NOT NULL COMMENT 'SKU编码',
  `attributes` json NOT NULL COMMENT '属性组合(JSON格式)',
  `price` decimal(10,2) NOT NULL COMMENT 'SKU价格',
  `stock` int(11) NOT NULL DEFAULT '0' COMMENT '库存',
  `barcode` varchar(20) DEFAULT NULL COMMENT '条形码',
  PRIMARY KEY (`id`),
  UNIQUE KEY `sku_code` (`sku_code`),
  KEY `product_id` (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

三、核心功能实现

1. SKU生成与存储

SKU编码通常由商品ID和属性值组合生成。以下是一个生成SKU的示例函数:

function generateSkuCode($productId, $attributes) {
  $attributeKeys = array_keys($attributes);
  sort($attributeKeys); // 确保属性顺序一致
  $attributeString = implode('-', $attributeKeys) . ':' . implode('-', $attributes);
  return 'SKU-' . $productId . '-' . md5($attributeString); // 使用MD5简化唯一标识
}

存储SKU的完整示例:

function addSku($productId, $attributes, $price, $stock) {
  $skuCode = generateSkuCode($productId, $attributes);
  $attributeJson = json_encode($attributes);
  
  $db = new PDO('mysql:host=localhost;dbname=ecommerce', 'user', 'password');
  $stmt = $db->prepare("INSERT INTO product_skus 
    (product_id, sku_code, attributes, price, stock) 
    VALUES (?, ?, ?, ?, ?)");
  $stmt->execute([$productId, $skuCode, $attributeJson, $price, $stock]);
  
  return $db->lastInsertId();
}

2. SKU查询与过滤

根据属性过滤SKU的示例:

function getSkusByAttributes($productId, $filterAttributes) {
  $db = new PDO('mysql:host=localhost;dbname=ecommerce', 'user', 'password');
  
  // 构建JSON查询条件(简化示例)
  $conditions = [];
  foreach ($filterAttributes as $key => $value) {
    $conditions[] = "JSON_EXTRACT(attributes, '$.$key') = '$value'";
  }
  $whereClause = implode(' AND ', $conditions);
  
  $stmt = $db->prepare("SELECT * FROM product_skus 
    WHERE product_id = ? AND $whereClause");
  $stmt->execute([$productId]);
  
  return $stmt->fetchAll(PDO::FETCH_ASSOC);
}

3. 库存更新与预警

库存更新需要原子性操作,避免并发问题:

function updateStock($skuId, $quantity) {
  $db = new PDO('mysql:host=localhost;dbname=ecommerce', 'user', 'password');
  $db->beginTransaction();
  
  try {
    $stmt = $db->prepare("UPDATE product_skus SET stock = stock + ? WHERE id = ?");
    $stmt->execute([$quantity, $skuId]);
    
    // 检查库存是否低于阈值
    $stmt = $db->prepare("SELECT stock FROM product_skus WHERE id = ?");
    $stmt->execute([$skuId]);
    $currentStock = $stmt->fetchColumn();
    
    if ($currentStock commit();
    return true;
  } catch (Exception $e) {
    $db->rollBack();
    return false;
  }
}

4. 前端交互示例(Vue.js)

前端展示SKU选择器的Vue组件示例:



四、高级功能扩展

1. 批量导入SKU

通过CSV文件批量导入SKU的示例:

function importSkusFromCsv($filePath, $productId) {
  $db = new PDO('mysql:host=localhost;dbname=ecommerce', 'user', 'password');
  $db->beginTransaction();
  
  try {
    $csv = array_map('str_getcsv', file($filePath));
    $headers = array_shift($csv);
    
    foreach ($csv as $row) {
      $attributes = [];
      for ($i = 0; $i prepare("INSERT INTO product_skus 
        (product_id, sku_code, attributes, price, stock) 
        VALUES (?, ?, ?, ?, ?)");
      $stmt->execute([
        $productId,
        generateSkuCode($productId, $attributes),
        json_encode($attributes),
        $row[count($headers) - 3],
        $row[count($headers) - 2]
      ]);
    }
    
    $db->commit();
    return true;
  } catch (Exception $e) {
    $db->rollBack();
    return false;
  }
}

2. SKU组合价格计算

根据基础价格和属性加成计算SKU价格的示例:

function calculateSkuPrice($productId, $attributes) {
  $db = new PDO('mysql:host=localhost;dbname=ecommerce', 'user', 'password');
  
  // 获取基础价格
  $stmt = $db->prepare("SELECT base_price FROM products WHERE id = ?");
  $stmt->execute([$productId]);
  $basePrice = $stmt->fetchColumn();
  
  // 计算属性加成(示例:红色加价10元)
  $priceIncrement = 0;
  if (isset($attributes['颜色']) && $attributes['颜色'] === '红色') {
    $priceIncrement += 10;
  }
  
  return $basePrice + $priceIncrement;
}

五、性能优化建议

1. 数据库索引优化:为product_skus表的product_idsku_code字段添加索引

2. 缓存策略:使用Redis缓存热门商品的SKU数据

3. 批量操作:使用预处理语句和事务减少数据库开销

4. 异步处理:将库存预警等非实时操作放入消息队列

六、完整示例:SKU管理控制器

class SkuController {
  private $db;
  
  public function __construct() {
    $this->db = new PDO('mysql:host=localhost;dbname=ecommerce', 'user', 'password');
  }
  
  // 添加SKU
  public function addSku($productId, $attributes, $price, $stock) {
    $skuCode = $this->generateSkuCode($productId, $attributes);
    $attributeJson = json_encode($attributes);
    
    $stmt = $this->db->prepare("INSERT INTO product_skus 
      (product_id, sku_code, attributes, price, stock) 
      VALUES (?, ?, ?, ?, ?)");
    $stmt->execute([$productId, $skuCode, $attributeJson, $price, $stock]);
    
    return $this->db->lastInsertId();
  }
  
  // 查询SKU
  public function getSku($skuId) {
    $stmt = $this->db->prepare("SELECT * FROM product_skus WHERE id = ?");
    $stmt->execute([$skuId]);
    return $stmt->fetch(PDO::FETCH_ASSOC);
  }
  
  // 更新库存
  public function updateStock($skuId, $quantity) {
    $this->db->beginTransaction();
    try {
      $stmt = $this->db->prepare("UPDATE product_skus SET stock = stock + ? WHERE id = ?");
      $stmt->execute([$quantity, $skuId]);
      
      $stmt = $this->db->prepare("SELECT stock FROM product_skus WHERE id = ?");
      $stmt->execute([$skuId]);
      $currentStock = $stmt->fetchColumn();
      
      if ($currentStock triggerStockAlert($skuId, $currentStock);
      }
      
      $this->db->commit();
      return true;
    } catch (Exception $e) {
      $this->db->rollBack();
      return false;
    }
  }
  
  private function generateSkuCode($productId, $attributes) {
    $attributeKeys = array_keys($attributes);
    sort($attributeKeys);
    $attributeString = implode('-', $attributeKeys) . ':' . implode('-', $attributes);
    return 'SKU-' . $productId . '-' . md5($attributeString);
  }
  
  private function triggerStockAlert($skuId, $stock) {
    // 实现库存预警逻辑(如发送邮件)
  }
}

关键词

PHP商城开发、SKU管理、数据库设计、库存控制、价格计算、批量导入、前端交互、性能优化

简介

本文详细介绍了PHP商城开发中SKU管理的完整实现方案,包括数据库设计、核心功能代码(生成/查询/更新SKU)、前端交互示例和高级功能扩展。通过实际代码示例展示了如何实现动态属性组合、库存预警和批量操作,同时提供了性能优化建议,适合中高级PHP开发者参考。

《PHP商城开发中常用的SKU管理功能代码示例整理.doc》
将本文以doc文档格式下载到电脑,方便收藏和打印
推荐度:
点击下载文档