I'm having difficulty converting this SQL query to Laravel Query Builder.I tried for hours but couldn't get my head around this.I tried online tools for converting SQL to Query builder but didn't work.
Here is my code:
SELECT
technologies.name_en,
Count(cig_members.id) AS CigTotal,
Count(CASE
WHEN cig_members.is_ethnic = 1 THEN 1
ELSE NULL
END) AS CigTotalEthnic,
Count(CASE
WHEN cig_members.gender = 'female' THEN 1
ELSE NULL
END) AS CigTotalFemale,
Count(CASE
WHEN cig_members.gender = 'female'
AND cig_members.is_ethnic = 1 THEN 1
ELSE NULL
END) AS CigTotalEthnicFemale,
Count(farmers.id) AS NonCigTotal,
Count(CASE
WHEN farmers.is_ethnic = 1 THEN 1
ELSE NULL
END) AS NonCigtoTalEthnic,
Count(CASE
WHEN farmers.gender = 'female' THEN 1
ELSE NULL
END) AS NonCigTotalFemale,
Count(CASE
WHEN farmers.gender = 'female'
AND farmers.is_ethnic = 1 THEN 1
ELSE NULL
END) AS NonCigtTotalEthnicFemale
FROM adopting_technologies
JOIN adopting_farmers
ON adopting_farmers.id = adopting_technologies.adopting_farmer_id
LEFT JOIN cig_members
ON cig_members.id = adopting_farmers.cig_member_id
LEFT JOIN farmers
ON farmers.id = adopting_farmers.farmer_id
LEFT JOIN financial_years
ON financial_years.id = adopting_farmers.financial_year_id
LEFT JOIN technologies
ON technologies.id = adopting_technologies.technology_id
GROUP BY adopting_technologies.technology_id
How can I convert this?
It should look roughly like this:
$result = AdoptingTechnology::selectRaw("
technologies.name_en,
Count(cig_members.id) AS CigTotal,
Count(CASE
WHEN cig_members.is_ethnic = 1 THEN 1
ELSE NULL
END) AS CigTotalEthnic,
Count(CASE
WHEN cig_members.gender = 'female' THEN 1
ELSE NULL
END) AS CigTotalFemale,
Count(CASE
WHEN cig_members.gender = 'female'
AND cig_members.is_ethnic = 1 THEN 1
ELSE NULL
END) AS CigTotalEthnicFemale,
Count(farmers.id) AS NonCigTotal,
Count(CASE
WHEN farmers.is_ethnic = 1 THEN 1
ELSE NULL
END) AS NonCigtoTalEthnic,
Count(CASE
WHEN farmers.gender = 'female' THEN 1
ELSE NULL
END) AS NonCigTotalFemale,
Count(CASE
WHEN farmers.gender = 'female'
AND farmers.is_ethnic = 1 THEN 1
ELSE NULL
END) AS NonCigtTotalEthnicFemale
")
->join('adopting_farmers', 'adopting_farmers.id','adopting_technologies.adopting_farmer_id')
->leftJoin('cig_members','cig_members.id','adopting_farmers.cig_member_id')
->leftJoin('farmers','farmers.id','adopting_farmers.farmer_id')
->leftJoin('financial_years','financial_years.id','adopting_farmers.financial_year_id')
->leftJoin('technologies','technologies.id','adopting_technologies.technology_id')
->groupBy('adopting_technologies.technology_id')
->get();
If you have any issues let me know:) ofc cannot test it locally