Как использовать groupBy () для отношения - PullRequest
0 голосов
/ 24 апреля 2019

В настоящее время возникают проблемы с использованием groupBy во вложенных отношениях на laravel. У меня есть 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 голосов
/ 24 апреля 2019

Вы можете попробовать следующий код

$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();
0 голосов
/ 24 апреля 2019

Попробуйте это:

User::with(['branch', 'branch.country' => function($q) {
        return $q->groupBy('CountryTbl.country_name');
    }])

или

User::with(['branch', 'branch.country'])
    ->get()
    ->groupBy('branch.country.country_name');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...