環境
Larave 5.1
やったこと
LaravelのPaginator(Illuminate\Pagination\LengthAwarePaginator)で、取得した後に中に入っている item をこそっと追加したり、書き換えたいときがある。
例えば、ユーザー一覧を取得した後に、特定のユーザーのみ上に追加したい、など。
下記のように実現できる。
<?php
$user = User::paginate(20);
$user->getCollection()->push(User::find(123));
getCollection() で内部の Collection が取れるので、そこに対してメソッドを実行すれば良い。
補足
shuffle や filter や map など、新しいコレクションを返す関数は効果が無い。
splice や transform などであればOK。
また、IN句を使ってDBから取り直したり、コレクションから Illuminate\Pagination\LengthAwarePaginator::make() する方法もありますが、性能が悪かったり面倒なので却下。
Illuminate\Pagination\LengthAwarePaginator::item はプライベート変数なので変更できない。