mcpField
L
laravel:transactions-and-consistency

laravel:transactions-and-consistency

github.com/jpcaparas开发157165 次安装17 周前更新
代码仓库

关于 laravel:transactions-and-consistency

面向 Laravel 开发的事务与一致性技能,介绍如何让多步数据库变更具备原子性并安全处理重试。内容涵盖提交时机、幂等任务和行锁。

主要功能

  1. 01用事务封装相关写入
  2. 02提交后再触发事件和任务
  3. 03设计幂等任务
  4. 04用行锁协调写入
  5. 05事务前验证不变量

适用场景

  1. 01原子化更新记录及其关联项
  2. 02仅在成功提交后排队任务
  3. 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