0
2

More than 3 years have passed since last update.

Laravelのpaginationで取得したcollectionデータの更新方法

Last updated at Posted at 2020-08-20

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等を使ってクエリを作っている場合等。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2