# 数据库模型(Yoone Subscriptions) 本插件新增一个独立的数据库模型目录 `includes/models/`,用于管理用户订阅实例的持久化数据。当前实现增加了基础表结构与 CRUD 接口,方便未来接入续订、暂停、取消等业务。 ## 表结构 表名:`{wp_prefix}yoone_subscriptions` 字段: - `id` bigint(20) unsigned 主键,自增 - `user_id` bigint(20) unsigned 用户ID(WP用户) - `product_id` bigint(20) unsigned 产品ID(WooCommerce 产品) - `period` varchar(10) 订阅周期:`month` 或 `year` - `qty` int(11) unsigned 订阅数量(每周期数量) - `price_per_cycle` decimal(18,8) 每周期价格(不含周期系数;年周期计算会乘以 12) - `status` varchar(20) 订阅状态(如 `active`、`paused`、`canceled`,当前未做枚举限制) - `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_processed` 或 `woocommerce_order_status_changed`)时,根据订单行项目写入订阅实例。 - 增加状态枚举与状态迁移方法(active→paused→canceled),以及日志记录。 - 增加管理后台页面展示用户订阅列表(可筛选用户、产品、状态),支持手动操作。 - 结合支付网关对接续订扣费逻辑,写入 `next_renewal_date` 并在到期前触发续订流程。