我在构建查询时遇到问题,该查询根据该国某个特定地区(省)的法律分支划定律师人数。
我有四张桌子,一张是分支机构,一张是用户,另一张是律师在执业法律和地区分支机构之一。
我可以使用以下查询汇总所有这些信息:
$lawyersbyprovince = DB::table('branchlawsubareas')
->leftJoin('lawyerbranches', function($join) {
$join->on( 'branchlawsubareas.id', '=', 'lawyerbranches.subarea_id');
})
->leftJoin('users', function($join) {
$join->on( 'lawyerbranches.user_id', '=', 'users.id');
})
->leftJoin('states', function($join) {
$join->on('users.working_province', '=', 'states.id_state');
})
->leftJoin('branchlaws', 'branchlawsubareas.area_id', '=', 'branchlaws.id')
->select('branchlawsubareas.name as subarea',
DB::raw('count(lawyerbranches.subarea_id) as total'),
'branchlawsubareas.id'
)
->where('states.id_state','=', $province)
->groupBy('branchlawsubareas.id')
->get();
此查询返回每个法律分支的律师人数,但不按省份划分。我花了足够的时间尝试一些事情但显然我错过了一些东西。
非常感谢任何帮助。
答案 0 :(得分:0)
尽量不要加入leftjoin的状态。
$lawyersbyprovince = DB::table('branchlawsubareas')
->leftJoin('lawyerbranches', 'branchlawsubareas.id', '=', 'lawyerbranches.subarea_id')
->leftJoin('users', 'lawyerbranches.user_id', '=', 'users.id')
->leftJoin('branchlaws', 'branchlawsubareas.area_id', '=', 'branchlaws.id')
->join('states', 'users.working_province', '=', 'states.id_state')
->where('states.id_state','=', $province)
->select('branchlawsubareas.name as subarea',
DB::raw('count(lawyerbranches.subarea_id) as total'),
'branchlawsubareas.id'
)
->groupBy('branchlawsubareas.id')
->get();
现在如果这不起作用,你还有另外一种方法。删除where()
子句并更改您的选择
...
->select(''branchlawsubareas.id', 'states.id as state_id')
...
这将返回包含所有数据的集合。然后你可以像这样操纵那个集合
$newCollection = $resultFromQuery->where('state_id', $province);
$newCollection->count(); //number of laywer in that state
我希望这会有所帮助,或者只是给你一个提示。