Laravel /雄辩分页和groupBy用于Postgres物化视图模型

时间:2019-06-19 21:09:31

标签: laravel postgresql eloquent laravel-5.8 materialized-views

我创建了一个物化视图: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进行分组。预先感谢您的任何见解!

2 个答案:

答案 0 :(得分:0)

几乎

AccountIndex::groupBy('account_uuid')->paginate()

分页确实有作用

groupBy() 只是编写 SQL,就像 ->where() ->join() 等一样,它们都准备了一个 SQL 语句,您可以通过运行 ->toSql() 返回一个 sql 字符串来尝试。

get() all() paginate() 实际上都在做一些事情,例如执行 SQL。

答案 1 :(得分:-1)

paginate方法与Illuminate\Database\Query\BuilderIlluminate\Database\Eloquent\Builder类相关,在Collection类中不存在, Collection类中与之对应的方法是forPage方法,您可以从documentation

获取更多信息