电商核心概念
InnoShop 中有五个核心数据模型:分类、品牌、规格、选项、属性。理解它们之间的区别和用途,是进行二次开发的基础。
概念对比总结
| 概念 | 用途 | 影响价格 | 影响库存 | 关联方式 |
|---|---|---|---|---|
| 分类 | 组织产品结构 | ❌ | ❌ | 多对多 (product_categories) |
| 品牌 | 标识制造商 | ❌ | ❌ | 一对多 (brand_id) |
| 规格 | 产品变体 SKU | ✅ | ✅ | 一对多 (product_skus) |
| 选项 | 增值服务 | ✅ | ✅ | 多对多 (product_options) |
| 属性 | 产品参数展示 | ❌ | ❌ | 多对多 (product_attributes) |
1. 分类 (Category)
按层级组织产品,便于用户导航和筛选。
电子产品
└── 手机
└── 智能手机特点:树形层级结构(parent_id)、一个产品可属于多个分类、支持 SEO 和多语言。
数据库表:categories(主表)、category_translations(翻译表)、product_categories(关联表)
代码位置:innopacks/common/src/Models/Category.php、Repositories/CategoryRepo.php
$category->children(); // 获取子分类
$category->activeChildren(); // 获取启用的子分类
$category->parent(); // 获取父分类
$category->products(); // 获取分类下的产品2. 品牌 (Brand)
标识产品的制造商或品牌商,便于用户按品牌筛选。
特点:通过 brand_id 外键直接关联产品、支持品牌 Logo、支持首字母筛选。
数据库表:brands(主表,无需翻译表)
代码位置:innopacks/common/src/Models/Brand.php、Repositories/BrandRepo.php
$brand->products();
BrandRepo::getInstance()->autocomplete($keyword);3. 规格 (Specification/Variant)
定义产品的不同版本/SKU,每个规格组合对应一个独立的库存单位。
| 规格组合 | SKU 编码 | 价格 | 库存 |
|---|---|---|---|
| 红色 - 大号 | SKU-001 | ¥99 | 50 |
| 红色 - 中号 | SKU-002 | ¥89 | 30 |
特点:独立 SKU、独立定价和库存、规格数据以 JSON 格式存储在 products.variables 字段。
产品 variables 字段示例:
{
"color": {
"name": {"en": "Color", "zh-cn": "颜色"},
"values": {
"red": {"name": {"en": "Red", "zh-cn": "红色"}},
"blue": {"name": {"en": "Blue", "zh-cn": "蓝色"}}
}
}
}数据库表:products.variables(JSON 字段定义规格)、product_skus(SKU 表)
代码位置:Models/Product.php、Models/Product/Sku.php、Repositories/Product/SkuRepo.php
$product->skus(); // 所有 SKU
$product->masterSku(); // 主 SKU
$product->isMultiple(); // 是否多规格
$product->variables; // 规格变量定义4. 选项 (Option)
购物时可选择的增值服务或附加选项,是产品的补充服务。
| 选项名称 | 可选值 | 价格影响 |
|---|---|---|
| 礼品包装 | 普通包装 / 精美礼盒 | +¥10 |
| 延保服务 | 1年保修 / 2年延保 | +¥99 |
特点:增值服务(非产品变体)、可影响价格、支持必选/可选、多语言 JSON 存储。
数据库表:options、option_values、product_options、product_option_values
代码位置:Models/Option.php、Models/OptionValue.php、Repositories/OptionRepo.php
$product->options(); // 产品的选项
$product->productOptions(); // 选项配置
$option->values(); // 选项的值5. 属性 (Attribute)
描述产品的规格参数和技术指标,用于产品详情页展示和分类页筛选。
| 属性名 | 属性值 |
|---|---|
| 材质 | 纯棉 |
| 重量 | 500g |
特点:产品参数展示、筛选功能、分组管理。筛选逻辑:不同属性组之间是 AND 关系,同一组内多个值是 OR 关系。
筛选 URL 格式:attr=1:10,11|2:20 表示 (属性1=值10 OR 值11) AND (属性2=值20)
数据库表:attributes、attribute_translations、attribute_groups、attribute_values、product_attributes
代码位置:Models/Attribute.php、Models/Attribute/Group.php、Repositories/AttributeRepo.php
$product->productAttributes(); // 产品属性
$product->groupedAttributes(); // 按分组的属性
$attribute->group(); // 属性组
$attribute->values(); // 属性值