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

Laravel Eloquent:无初始条件结果时查询次选条件的实现

解决方案

你的原查询用了orWhere,这会直接返回所有status为done或sent的文档,完全不符合「优先查done,无结果再查sent」的逻辑。正确的处理方式是分两步判断:

  • 先查询所有status='done'的文档
  • 如果第一步没有找到任何结果,再查询status='sent'的文档

基础实现代码

// 先获取done状态的文档
$documents = $result->documents()->where('status', 'done')->get();

// 若结果为空,再获取sent状态的文档
if ($documents->isEmpty()) {
    $documents = $result->documents()->where('status', 'sent')->get();
}

更高效的写法(减少数据查询开销)

如果只需要判断是否存在done状态的文档,用exists()会比get()更高效——它只返回布尔值,不会加载全量数据:

// 判断是否存在done状态的文档
$hasDoneDocuments = $result->documents()->where('status', 'done')->exists();

// 根据判断结果获取对应状态的文档
$documents = $result->documents()->where('status', $hasDoneDocuments ? 'done' : 'sent')->get();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 05:52:03