我真的很接近这一点,但它并没有完全捕捉到所有场景。有一组电子邮件。他们每个人都可以有多个评论(肯定至少有一个)。审核将具有approver_status
属性(此审核附带的审核者可以批准或拒绝)和approved
属性(无论是否实际批准发送)。一些评论者不是"批准者"并且只能提供反馈。我雄辩的查询如下:
$data = Email::with('emailReviews')
->where(['created_by' => $personID, 'sent_at' => null])
->get()
->map(function ($email) {
$reviewsStatus = $email->emailReviews->pluck('approved')->unique();
if ($reviewsStatus->count() == 1 && $reviewsStatus->first()) {
$email->approvalStatus = true;
} else {
$email->approvalStatus = false;
}
return $email;
});
如果所有评论者都是"批准者"它会有效,但如果有批评者和非批准者进行一些评论,即使所有"批准者"已经批准了。在map函数中,如果审阅者没有approved
,我需要忽略approver_status
属性。我想知道我是否可以添加一些内容:
$reviewsStatus = $email->emailReviews->pluck('approved')->unique();
基本上充当where子句where approver_status === false
。我知道我不能这样做,但这就是我的想法。我还试过在那里添加if语句:
$data = Email::with('emailReviews')
->where(['created_by' => $personID, 'sent_at' => null])
->get()
->map(function ($email) {
$approverStatus = $email->emailReviews->pluck('approver_status')->unique();
if ($approverStatus->count() == 1 && $approverStatus->first()) {
$reviewsStatus = $email->emailReviews->pluck('approved')->unique();
if ($reviewsStatus->count() == 1 && $reviewsStatus->first()) {
$email->approvalStatus = true;
} else {
$email->approvalStatus = false;
}
}
return $email;
});
对于具有更复杂审核方案的电子邮件,这不会返回$email->approvalStatus
。谢谢!
答案 0 :(得分:1)
您可以过滤批准和approver_status都设置为true的emailReviews,然后如果至少有一次计数,则将approvalStatus设置为true。
$data = Email::with('emailReviews')
->where(['created_by' => $personId, 'sent_at' => null])
->get()
->map(function ($email) {
$email->approvalStatus = $email->emailReviews->where('approved', true)
->where('approver_status', true)
->count() > 0;
return $email;
});