如何用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的Paymentupdate(...):批量更新符合所有条件的Payment的状态字段
如果你的Payment只关联Membership这一种模型,也可以去掉where('payable_type', Membership::class)这一行,但保留它能让查询更精准高效。
注意:这种批量更新方式不会触发模型的
saved/updated事件,如果需要触发事件,需要改为循环处理单条记录,但批量update在性能上更优。
内容的提问来源于stack exchange,提问作者Duddy67
相关产品推荐
相关产品推荐

