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

Laravel 如何仅在模型关联存在时对关联数据执行条件查询

问题分析

你之前的查询逻辑错误出在使用了orWhereHas,这会让查询条件变成「installer_id不为空 或者 存在符合条件的关联Assignment」,不符合「installer_id不为空是必填前提」的要求。

需求对应查询逻辑

你需要的查询条件组合是:

  1. installer_id 不为空
  2. 同时满足以下两个条件之一:
    • 不存在关联的Assignment记录
    • 存在至少一条关联的Assignment记录的status不等于2

实现代码

基于你已经定义好的assignments远程关联,可以直接用以下写法:

$schedulables = Survey::whereNotNull('installer_id')
    ->where(function ($query) {
        // 没有关联Assignment 或者 存在status不等于2的关联Assignment
        $query->whereDoesntHave('assignments')
              ->orWhereHas('assignments', function ($q) {
                  $q->where('status', '!=', 2);
              });
    })
    ->get();

如果不想用远程关联,直接用原来的嵌套关联写法也可以:

$surveys = Survey::whereNotNull('installer_id')
    ->where(function ($query) {
        $query->whereDoesntHave('installation.assignments')
              ->orWhereHas('installation', function ($q) {
                  $q->whereHas('assignments', function ($subQ) {
                      $subQ->where('status', '!=', 2);
                  });
              });
    })
    ->get();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:06:03