每个目标都有许多证书。
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
)
答案 0 :(得分:0)
你可以试试 doesntHave
Target::doesntHave('certs','and', function ($query) { $query->where('uploaded', 0); })->get()
更新
Target::with(['certs'])->whereHas('certs', function ($query) { $query->where('uploaded', 0); })->get()
答案 1 :(得分:0)
您当前的查询正在获取所有没有任何未上传证书的目标,即没有上传为 0 的证书。
您应该能够通过将 0
更改为 1
来获取您想要的内容,即获取没有任何已上传证书的所有目标:
Target::whereDoesntHave('certs', function ($query) {
$query->where('uploaded', 1);
})->get();