Laravelのpaginationで取得したデータは特殊なcollectionクラスであるため、
新しいcollectionクラスを返すfilterやmapのような操作では要素が更新できません。
$articles->getCollection()->transform(
function ($article, $key) {
//操作
return $article;
}
);
のようにgetCollectionを使ってからtransformで変形することが必要です。
ここで、注意しなくてはいけないのは、articleの下にさらにcollectionがネストしている場合[1]も、
新しいcollectionクラスを返す操作ではそのcollectionクラスが更新できないという点です。
その場合はgetCollectionなしのtransformで更新できますが、
要素を削除する場合はunset等の新しいcollectionを返さないで削除できる手段を用いる必要があります。
ただこれネストしているのでもっといい方法あるかもしれないけど
//articleの下にhashtagがネストしている
$articles->getCollection()->transform(
function ($article, $key) {
$article["tags"]->transform(function($tag,$key){
//タグ更新の場合。ちなみにここで何もreturnしなかった場合、nullが代入される。
return $tag;
}
//要素削除の場合
foreach($article["tags"] as $key=>$tag){
//条件を入れる。ここは例えばタグの名前がtestの場合
if(($tag["name"]==='test')){
//条件に合致したものをunset
unset($article["hashtags"][$key]);
}
}
return $article;
}
);
[1]元データがModelでwith等を使ってクエリを作っている場合等。