Laravel5.5 DBから取得した投稿データ($posts)を独自の配列に任意に並び替える

2018-05-28

1707

通りがりすの人

関連メモ

Laravel5.5 DBから取得した投稿データ($posts)を独自の配列に任意に並び替える

本来DBにクエリをかけた時点でorderByなどで並び替えをしたい。
もしくは

->orderByRaw('FIELD(pref_cd, '.$order_by_raw_str.')')

このようにorderByRawを使う方法。
クエリでは並び替えができない場面があり、PHPの方で処理するしかなくなった。

まずPHPでのオブジェクトのソートの仕方が分からなかった。
ぐぐって出てくるのは配列のソートばかり。
ぶっちゃけ検索力&理解力が低いです。

んで結局LravelのコレクションのsortByを使った。

コレクション値をどのようにソートするかを決めるため、コールバックを渡すこともできます。

とのことでそのようにした。
これはphpのuasortにあたるのかな?

$sorted = $posts->sortBy(function ($post, $key) {
    $sort_rule = array(5,6,7,0,1,2,3,4);//postIDを並び替えたい順番にして記述
    return array_search($post->id, $sort_rule);
});
@endphp

@foreach ($sorted as $key => $post)
{{ $post->name }}<br>
{{ $post->author->name }}
@endforeach

 
まぁこれで思い通りの挙動にはなった。
とはいえこんな風に並び順を指定すること自体が好ましいとは思えない。
しかたがないときもある。

0

投稿者:通りがりすの人 / 投稿日:2018-05-28 17:35:31 / PV数:1707 / コメント数:1

sponsor

コメント 1

2019-02-04 22:54:42

通りすがりの人

そのままだと外にある変数が使えないのでuseする書き方
これで$reccomendIdsが使えるようになる

        $reccomendPosts = $reccomendPosts->sortBy(function ($post, $key) use ($reccomendIds){

コメント投稿