【问题标题】:whereDoesntHave not working with hasMany relationship as expectedwhereDoesntHave 没有按预期使用 hasMany 关系
【发布时间】:2021-08-19 10:32:12
【问题描述】:

每个目标都有许多证书。

certs
target_id uploaded
1         1
1         0

我想获取没有上传任何证书的目标 (uploaded = 0)。以下查询仍然返回目标 1,但它不应该返回任何内容!

Target::whereDoesntHave('certs', function ($query) { 
    $query->where('uploaded', 0);
})->get();

laravel 产生的查询是:

SELECT * FROM `targets`
WHERE NOT EXISTS (
    SELECT * FROM `certs`
    WHERE `targets`.`id` = `certs`.`target_id` AND `uploaded` = 0
)

【问题讨论】:

    标签: php mysql laravel eloquent orm


    【解决方案1】:

    您当前的查询正在获取所有没有任何未上传证书的目标,即没有有上传为 0 的证书。

    您应该能够通过将0 更改为1 来获得所需的内容,即获取所有没有上传任何证书的目标:

    Target::whereDoesntHave('certs', function ($query) {
        $query->where('uploaded', 1);
    })->get();
    

    【讨论】:

      【解决方案2】:

      你可以试试doesntHave

        Target::doesntHave('certs','and', function ($query) { $query->where('uploaded', 0); })->get()
      

      更新

       Target::with(['certs'])->whereHas('certs', function ($query) { $query->where('uploaded', 0); })->get()
      

      【讨论】:

      • 谢谢,但它提出了完全相同的错误查询
      • 让我试试.few min
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-31
      • 1970-01-01
      相关资源
      最近更新 更多