環境
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
はプライベート変数なので変更できない。