[英]Convert raw SQL to Laravel Query Builder
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.我很难将此 SQL 查询转换为 Laravel 查询生成器。我尝试了几个小时,但无法解决这个问题。我尝试了用于转换 Z9778840A0100CB30C982876741B0B5 的在线工具。
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如果您有任何问题,请告诉我:) ofc 无法在本地测试
DB::table('adopting_technologies')
->select('adopting_technologies.technology_id', 'technologies.name_en')
->selectRaw("
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();
class adopting_technologies extends Model
{
public function newCollection(array $models = [])
{
return new FarmerCollection($models);
}
public function adopting_farmers()
{
return $this->belongsTo(adopting_farmers::class);
}
// other relations for 'cig_members', 'farmers', 'financial_years' and 'technologies'
}
namespace App\Collections;
use Illuminate\Database\Eloquent\Collection;
class FarmerCollection extends Collection
{
public function cigTotal()
{
return $this->pluck('cig_members')->map(function($items) { return $items->count(); })->sum();
}
// other totals for cigTotalEthnic, CigTotalFemale, CigTotalEthnicFemale, NonCigTotal, NonCigtoTalEthnic, NonCigTotalFemale, NonCigtTotalEthnicFemale
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.