Laravel 拉威尔雄辩结构
我有以下表格:Laravel 拉威尔雄辩结构,laravel,Laravel,我有以下表格: Attendances id | member_id | attended_at 1 | 1 | 01/01/2018 2 | 2 | 01/01/2018 3 | 3 | 01/01/2018 4 | 4 | 01/01/2018 5 | 5 | 01/01/2018 Members id | church_id 1 | 1 2 | 1 3 | 3 4 | 2 5 | 3 C
Attendances
id | member_id | attended_at
1 | 1 | 01/01/2018
2 | 2 | 01/01/2018
3 | 3 | 01/01/2018
4 | 4 | 01/01/2018
5 | 5 | 01/01/2018
Members
id | church_id
1 | 1
2 | 1
3 | 3
4 | 2
5 | 3
Churches
id | church_location
1 | Olongapo
2 | Bataan
3 | Subic
我的问题来自出席人数表,我需要知道每个教堂地点有多少人出席,下面是我需要的结果:
Olongapo - 2
Bataan - 1
Subic - 2
你能帮我填一下下面的代码吗
$attendances = Attendance::
给出该结果的原始SQL将如下所示:
select church_location, count(a.id) from churches as c
inner join members as m on c.id = m.church_id
inner join attendances as a on a.member_id = m.id
group by c.id;
现在,要用拉威尔的话来翻译,我将从教堂模型开始,而不是反过来
$attendances = Church::with(['members' => function($query) {
$query->join('attendances as a', 'a.member_id', '=', 'members.id');
}])
->select([
'church_location',
DB::raw('count(a.id) as attendance')
]
->groupBy('id')->get();
您可能需要对其进行一些修改,因为我在没有现有模型的情况下将其翻译为laravel,但它应该接近您想要的。在我尝试时,原始查询肯定可以工作
--编辑
另一件需要注意的事情是,为了使上述代码正常工作,您必须在模型中设置关系
--使用查询生成器进行编辑
DB::table('churches as c')
->select([
'c.church_location',
DB::raw('count(a.id) as attendance')
])
->join('members as m', 'm.church_id', '=', 'c.id')
->join('attendances as a', 'm.member_id', '=', 'm.id')
->groupBy('c.id')
->get();
尝试过,但所有教堂只计算到1,例如:Olongapo-1;Bataan-1,有什么想法吗?如果没有模型,真的很难找到。您可以尝试通过显式记录哪个id对它们进行分组,例如
groupBy('churches.id')
并查看它是否有效,或者尝试我现在添加的查询生成器选项。