数据库设计
当前版本由 22 个核心迁移文件维护站点、商品、内容、应用商店和插件平台的数据结构。插件还可以在自己的命名空间内维护独立迁移。
核心业务表
| 表 | 用途 | 关键字段 |
|---|---|---|
settings | 全站设置 | key、value,包含 site_currency。 |
users | 后台账号 | role、permissions、password_hash。 |
product_categories | 商品分类 | slug、parent_id。 |
products | 商品 | slug、images_json、price_mode、deleted_at。 |
product_prices | 阶梯价格 | min_qty、max_qty、price。 |
product_skus | 多规格 SKU | sku_name、min_qty、price、deleted_at。 |
posts | 文章、案例、页面 | post_type、slug、content、seo_*。 |
messages | 联系留言 | 联系人、邮箱、电话、留言内容。 |
inquiries | 商品询盘 | 商品、数量、客户信息、状态。 |
media_files | 媒体库 | 文件路径、类型、大小、文件夹。 |
menus / menu_items | 导航菜单 | Slug、层级、排序、链接。 |
sliders / slider_items | 轮播图 | Slug、图片、标题、按钮链接。 |
app_store_theme_installs | 主题安装 | 远程资源、版本、安装记录。 |
plugins / plugin_* | 插件平台 | 版本、设置、迁移、任务、运行记录和日志。 |
update_logs | 更新日志 | 版本、状态、日志、备份信息。 |
migrations | 迁移记录 | 已执行迁移版本。 |
产品价格模式
products.price_mode 控制详情页显示方式:
| 值 | 前台含义 | 关联数据 |
|---|---|---|
tier | 阶梯价格 | product_prices |
sku | 多规格 SKU 价格 | product_skus |
range | 价格区间 | products.price_range_min、products.price_range_max |
negotiable | 面谈价格 | 不展示固定价格,引导询盘 |
辅助函数负责标准化模式:
function product_price_modes(): array {
return ['tier', 'sku', 'range', 'negotiable'];
}
function normalize_product_price_mode(string $mode, string $fallback = ‘tier’): string {
return in_array($mode, product_price_modes(), true) ? $mode : $fallback;
}
兼容提醒
product_prices.currency 是历史字段。当前价格展示统一读取 settings.site_currency,避免同一站点不同产品显示混乱。
添加新数据表
新增数据表必须写迁移,不要直接修改现有数据库文件。
步骤:
- 在
app/Migrations/创建时间戳文件。 up()中创建表、索引和默认数据。down()中写回滚逻辑。- 创建模型封装读写。
- 在控制器中调用模型。
- 登录后台程序更新页检查迁移状态。
建议:
- SQLite 中新增列前先检查列是否存在。
- 表和索引使用
IF NOT EXISTS。 - 迁移要幂等,重复执行不应破坏数据。
- 不要在迁移里删除用户数据,除非功能明确要求且有备份。