如何在关系上使用groupBy()

时间:2019-04-24 07:38:22

标签: laravel eloquent

目前在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;
}

我的代码不起作用。它总是返回一个错误信息:

  

语法错误或访问冲突

2 个答案:

答案 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();