You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Eloquent更新符合双pending条件的MorphMany关联Payment状态?

实现方案

当然可以通过Eloquent完成这个批量更新操作,具体实现代码如下:

use App\Models\Membership;
use App\Models\Payment;

// 将 'completed' 替换为你需要更新到的目标状态
Payment::where('status', 'pending')
    // 限定关联的 payable 类型为 Membership(避免误处理关联其他模型的Payment)
    ->where('payable_type', Membership::class)
    // 筛选所属 Membership 状态也为 pending 的记录
    ->whereHas('payable', function ($query) {
        $query->where('status', 'pending');
    })
    ->update(['status' => 'completed']);

代码说明:

  • where('status', 'pending'):先筛选出自身状态为 pending 的Payment记录
  • where('payable_type', Membership::class):明确只处理关联到Membership的Payment(因为MorphTo关联可能对应多种模型类型)
  • whereHas('payable', ...):通过关联查询,筛选出所属Membership状态同样为pending的Payment
  • update(...):批量更新符合所有条件的Payment的状态字段

如果你的Payment只关联Membership这一种模型,也可以去掉where('payable_type', Membership::class)这一行,但保留它能让查询更精准高效。

注意:这种批量更新方式不会触发模型的saved/updated事件,如果需要触发事件,需要改为循环处理单条记录,但批量update在性能上更优。

内容的提问来源于stack exchange,提问作者Duddy67

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 11:42:34