目前在laravel上的嵌套关系中使用groupBy有麻烦。我有3个表格,我想根据CountryTbl
值对结果进行分组。这是表格。
UserTbl
----------------------------------
id | name | branch_id |
----------------------------------
1 | Joseph | 1 |
2 | Manuel | 1 |
3 | Margaret | 3 |
----------------------------------
BranchTbl
----------------------------------
id | branch_name | country_id |
----------------------------------
1 | Pampanga | 1 |
2 | Manila | 1 |
3 | California | 2 |
----------------------------------
CountryTbl
------------------------
id | country_name |
------------------------
1 | Philippines |
2 | United States |
------------------------
这是我的模特
UserModel
public function branch()
{
return $this->belongsTo('App\Branch');
}
BranchModel
public function country()
{
return $this->belongsTo('App\Country');
}
CountryModel
现在,在上表中,我想要获取所有用户并按国家/地区分组。
这是我尝试过的。
public function getAllUsers(){
$users = User::with('branch')
->with(['branch.country' => function($q){
return $q->groupBy('country_name');
}])
->get();
return $users;
}
我的代码不起作用。它总是返回一个错误信息:
语法错误或访问冲突
答案 0 :(得分:0)
尝试一下:
User::with(['branch', 'branch.country' => function($q) {
return $q->groupBy('CountryTbl.country_name');
}])
或
User::with(['branch', 'branch.country'])
->get()
->groupBy('branch.country.country_name');
答案 1 :(得分:0)
您可以尝试以下代码
$data = DB::table('country')
->join('branch', 'country_id', '=', 'country.id')
->join('user', 'branch_id', '=', 'branch.id')
->select('country.country_name','user.name','branch.branch_name')
->groupBy('country.country_name')
->orderBy('country.country_name','ASC')
->get();