php - 将原始 SQL 转换为 Laravel 查询构建器
问题描述
我很难将此 SQL 查询转换为 Laravel 查询生成器。我尝试了几个小时,但无法解决这个问题。我尝试了将 SQL 转换为查询生成器的在线工具,但没有奏效。
这是我的代码:
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
我怎样才能转换这个?
解决方案
它应该大致如下所示:
$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();
如果您有任何问题,请告诉我:) ofc 无法在本地测试
推荐阅读
- ios - 在 iOS 13 上滚动到顶部时,工具栏项目重置为故事板默认值
- mongoose - Nestjs原始mongodb查询
- c++ - 为什么并行执行策略这么慢
- javascript - 如何滚动焦点组件以查看在 React JS 中显示的屏幕键盘?
- mongoose - GraphQL 在 mongoose 回调中返回 Null
- sql-server - 会话阻止自己
- scheme - 有什么方法可以在 Scheme/Racket 中映射具有多个参数的函数?
- react-native - 未设置 fbBatchedBridgeConfig
- r - 从 ymdhms 变量中删除 ymd
- python - KNN AUC 分数列表对象错误的循环