Laravel / Eloquent pagination и groupBy для материализованной модели представления postgres - PullRequest
1 голос
/ 20 июня 2019

Я создал материализованное представление: accounts_index, у которого есть пара оставшихся соединений, поэтому мне нужно создать группу с помощью красноречивой модели. Мне также нужно разбить коллекцию на страницы, и у меня возникают проблемы с порядком вещей. Материализованный вид:

CREATE materialized VIEW accounts_index
        AS SELECT a.account_uuid,
                  a.account_no,
                  a.person_owner_uuid,
                  a.company_owner_uuid,
                  a.account_group_uuid,
                  a.account_scope_uuid,
                  a.created_at,
                  a.deleted_at,
                  s.service_uuid,
                  s.status,
                  st.service_type
        FROM   accounts a
                LEFT JOIN services s
                        ON a.account_uuid = s.account_uuid
                LEFT JOIN service_types st
                        ON s.service_type_uuid = st.service_type_uuid

Красноречивая модель может захватить эту таблицу следующим образом: AccountIndex::all();. Я мог бы разбить на страницы это: AccountIndex::paginate(); или сделать groupBy: AccountIndex::all()->groupBy('account_uuid');, но потерял из-за того, как объединить два. Некоторые попытки:

  • AccountIndex::all()->groupBy('account_uuid')->paginate(): Method Illuminate\Database\Eloquent\Collection::paginate does not exist.
  • AccountIndex::paginate()->groupBy('account_uuid');: возвращает коллекцию без нумерации страниц.
  • $accountsIndex = collect(\DB::table('accounts_index')->get()); $accountsIndex->groupBy('account_uuid')->paginate();: То же Method Illuminate\Support\Collection::paginate does not exist. исключение.

Основная проблема, которую я пытаюсь решить, состоит в том, что эти объединения будут возвращать учетные записи, которые имеют несколько служб (так что несколько строк), и мне нужно затем сгруппировать по account_uuid. Заранее спасибо за любые идеи!

1 Ответ

0 голосов
/ 20 июня 2019

paginate метод относится к Illuminate\Database\Query\Builder или Illuminate\Database\Eloquent\Builder классам, он не существует в Collection классе, соответствующий метод в классе Collection - это метод forPage, более подробную информацию можно получить из документации

...