GroupBy на красноречивых отношениях - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь объединить 4 модели, чтобы получить сводный отчет. Это мои таблицы.

user
-id
-name
-country_id

country
-id
-name

invoice
-id
-user_id
-type_id

type
-id
-name

Я хочу подсчитать детали счета для каждого типа в зависимости от страны. Это что-то вроде этого.

country | type_name_1 | type_name_2 | type_name_2
America |   10        |   2         |   4
Canada  |   62        |   0         |   35
China   |   23        |   9         |   5

Я попробовал следующий запрос, но он не дает того ответа, который я хочу выше.

\App\Invoice::all()->groupBy(function($s){
    return $s->user->country->name;
})->groupBy(function($s){
    return $s->type->count();
})

Ошибка: исключение с сообщением 'Свойство [тип] не существует в этом экземпляр коллекции. '

Может кто-нибудь дать мне указатель здесь?

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Вы должны запросить модель страны как

    Country::withCount(['invoice' => function($q){
          $q->groupBy('type_id');
     ->get();
0 голосов
/ 19 ноября 2018

Ваш запрос получит только результаты модели Invoice.Чтобы получить связанную таблицу, используйте with.

\App\Invoice::with('type','user')->get();

. Это приведет к сбору счетов со связанными типами и пользователем.Затем вы можете использовать метод groupBy для фильтрации коллекции результатов.Чтобы узнать больше о методе groupBy, см. Ссылку .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...