用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/yyw-code/MallBase --skill validate-then-transact命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
MallBase 数据库真相源、正式字段与升级 SQL 规则;修改 backend/install/data/schema 或 demo seed、新增/改名字段、移除运行时字段探测,或用户明确要求已有库升级、本地 upgrade SQL、发布迁移和 SimpleSqlMigrationService 时使用。
MallBase ThinkPHP 后端规则导航;仅在后端任务涉及多个场景、需要查找项目规则,或无法确定应读取哪个更具体的 ThinkPHP skill 时使用。
MallBase 文档放置与导航规范;新增、移动、删除 docs、模块文档、根 README 或 docs/index.md 导航时使用。
基于 SOC 职业分类
正在显示 SKILL.md
| name | validate-then-transact |
| description | MallBase ThinkPHP 写操作与事务规则;实现或修改 create、update、delete、状态流转、多表写入、余额库存变更、行锁、条件更新或并发一致性校验时使用。 |
$this->validateBusiness($data);
return $this->transaction(function () use ($data): int {
$model = $this->model();
$model->save($data);
return (int) $model->id;
});
“先校验再事务”不等于禁止事务内校验。余额、库存、订单状态、退款额度等值可能在事务外检查后被并发修改,必须在事务内重新读取可信当前状态:
return $this->transaction(function () use ($id): bool {
$row = $this->model()->where('id', $id)->lock(true)->find();
if ($row === null) {
throw new BusinessException('记录不存在');
}
if (!$this->canTransit((int) $row->status)) {
throw new BusinessException('当前状态不允许操作');
}
return $row->save(['status' => 2]);
});
在热点计数或库存扣减中,优先使用带条件的原子 UPDATE,再根据受影响行数判断是否冲突。唯一约束、条件更新和行锁是并发下的最终防线,事务外预检不能替代它们。