Kral biraz araştırma yaptım şunları buldum umarım bi faydam olur.
Sorun:
whereHas koşulu tek başına çalışırken doğru sonuçları verirken, if blokları da dahil olduğunda tüm sonuçları getiriyor.
Sebep:
whereHas ve if blokları farklı sorgular oluşturuyor ve bu sorgular birleştirilmiyor.
Çözüm Önerileri:
1. whereHas Koşulunu Ana Sorguya Dahil Etme:
$result = Csr::with(['supplier_company:id,name', 'csr_process', 'csr_process.instructions'])
->whereHas('csr_process.instructions', function ($q) use ($instructionTypeId) {
$q->where('instruction_type.id', $instructionTypeId);
});
// "if" bloklarını "whereHas" içine taşıyın ve gerekli filtrelemeyi yapın
if ($joinLife && count($joinLife) && !in_array(1, $joinLife)) {
$result->whereJsonContains('join_life', $joinLife);
}
if ($companyId) {
$result->whereJsonContains('company_id', $companyId);
}
if ($disneyLicences) {
if ($disneyLicences["license_id"]) {
foreach ($disneyLicences["license_id"] as $license){
$result->orWhere('disney_licences->license_id',$license);
}
}
if ($disneyLicences["disney_id"]) {
foreach ($disneyLicences["disney_id"] as $disney){
$result->orWhere('disney_licences->disney_id',$disney);
}
}
}
// Sonuçları alalım ve JSON formatında döndürelim
$result = $result->get()->toArray();
return Output::success($result);