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

Eloquent查询修正:需判断所有审批者是否均已审批邮件

问题分析

你的代码逻辑存在一个关键问题:在foreach循环中,只要最后一条满足approver_status === true的评审记录是approved === true,就会把approvalStatus设为true——但如果前面有一条有审批权限的评审者没通过,循环到后面时这个值会被覆盖成true,这完全不符合你「所有审批者都通过才为true」的需求。

修正方案

我们可以利用Laravel集合的方法来更精准地实现这个逻辑:先过滤出所有拥有审批权限的评审记录,再检查这些记录是否全部完成了审批通过。如果没有任何审批权限的评审者,你可以根据业务需求设置默认值(下面代码默认设为true,你可以按需调整)。

$emailsWithReviews = Email::with('emailReviews')
    ->where(['created_by' => $personID, 'sent_at' => null])
    ->get()
    ->map(function ($email) {
        // 筛选出所有具备审批权限的评审记录
        $approverReviews = $email->emailReviews->where('approver_status', true);
        
        // 处理无审批者的边界情况
        if ($approverReviews->isEmpty()) {
            $email->approvalStatus = true;
            return $email;
        }
        
        // 检查所有审批者是否都已通过审批
        $allApproved = $approverReviews->every(function ($review) {
            return $review->approved === true;
        });
        
        $email->approvalStatus = $allApproved;
        return $email;
    });
代码说明
  • where('approver_status', true):从所有评审记录中精准筛选出拥有审批权限的用户,排除仅能提供反馈的角色。
  • isEmpty():处理没有审批者的特殊场景,避免后续判断出现逻辑漏洞。
  • every()方法:集合的every会遍历所有元素,只有当每一个元素都满足回调条件时才返回true,完美匹配你「所有审批者都通过才生效」的业务逻辑。

这样修改后,就彻底解决了原代码只看最新一条评审记录的问题,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:02:18