yoone-wc-subscriptions/docs/数据库模型.md

2.7 KiB
Raw Blame History

数据库模型Yoone Subscriptions

本插件新增一个独立的数据库模型目录 includes/models/,用于管理用户订阅实例的持久化数据。当前实现增加了基础表结构与 CRUD 接口,方便未来接入续订、暂停、取消等业务。

表结构

表名:{wp_prefix}yoone_subscriptions

字段:

  • id bigint(20) unsigned 主键,自增
  • user_id bigint(20) unsigned 用户IDWP用户
  • product_id bigint(20) unsigned 产品IDWooCommerce 产品)
  • period varchar(10) 订阅周期:monthyear
  • qty int(11) unsigned 订阅数量(每周期数量)
  • price_per_cycle decimal(18,8) 每周期价格(不含周期系数;年周期计算会乘以 12
  • status varchar(20) 订阅状态(如 activepausedcanceled,当前未做枚举限制)
  • start_date datetime 订阅开始时间
  • next_renewal_date datetime 下次续订时间(可空)
  • created_at datetime 创建时间
  • updated_at datetime 更新时间

索引:

  • user_id
  • product_id
  • status

安装:在插件激活时调用安装逻辑创建/升级表结构(使用 dbDelta)。

目录与类

  • 目录:wp-content/plugins/yoone-subscriptions/includes/models/
  • 类:Yoone_Subscriptions_DB(文件:class-yoone-subscriptions-db.php

主要方法:

  • Yoone_Subscriptions_DB::install() 创建/升级表结构
  • Yoone_Subscriptions_DB::create(array $data) 插入订阅实例返回插入ID
  • Yoone_Subscriptions_DB::update(int $id, array $data) 更新订阅实例
  • Yoone_Subscriptions_DB::get(int $id) 获取单条订阅实例
  • Yoone_Subscriptions_DB::get_by_user(int $user_id, array $args = []) 获取某用户的订阅实例列表

与现有逻辑的关系

目前产品的订阅计划配置(是否启用、周期、默认数量、每周期价格、是否允许一次性购买)仍存储在产品 postmeta 中,见 Yoone_Subscriptions::get_config()

新增数据库模型仅作为“用户订阅实例”的数据持久层,暂未在前端流程中自动写入。待未来接入续订与周期性扣费时,可在下单或激活订阅时创建实例,并结合定时任务(wp_cron)或队列进行续订处理。

下一步建议

  • 在结账成功(woocommerce_checkout_order_processedwoocommerce_order_status_changed)时,根据订单行项目写入订阅实例。
  • 增加状态枚举与状态迁移方法active→paused→canceled以及日志记录。
  • 增加管理后台页面展示用户订阅列表(可筛选用户、产品、状态),支持手动操作。
  • 结合支付网关对接续订扣费逻辑,写入 next_renewal_date 并在到期前触发续订流程。