关于 laravel:transactions-and-consistency
面向 Laravel 开发的事务与一致性技能,介绍如何让多步数据库变更具备原子性并安全处理重试。内容涵盖提交时机、幂等任务和行锁。
主要功能
- 01用事务封装相关写入
- 02提交后再触发事件和任务
- 03设计幂等任务
- 04用行锁协调写入
- 05事务前验证不变量
适用场景
- 01原子化更新记录及其关联项
- 02仅在成功提交后排队任务
- 03防止任务重试产生重复影响
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ jpcaparas/ superpowers-laravel --skill laravel:transactions-and-consistency安装后在 Claude Code 中输入/laravel:transactions-and-consistency确认已加载。
详细介绍
事务与一致性
确保多步更改具有原子性,并使重试安全。
命令
DB::transaction(function () use ($order, $payload) {
$order->update([...]);
$order->items()->createMany($payload['items']);
OrderUpdated::dispatch($order); // or flag for after-commit
});
// Listener queued after commit
class SendInvoice implements ShouldQueue {
public $afterCommit = true;
}
模式
- 使用
DB::transaction包装写入操作序列及相关副作用 - 优先使用
$afterCommit或dispatchAfterCommit()来处理事件 / 任务 - 确保任务具有幂等性(检查现有状态,使用唯一约束)
- 在需要时使用
lockForUpdate()协调行级操作 - 在事务开始前,于边界处验证不变量
- Laravel 13+:
upsert()在uniqueBy为空时会抛出InvalidArgumentException——始终传入实际的唯一列
评论
支持 Markdown