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
コメント 1
2019-02-04 22:54:42
通りすがりの人
そのままだと外にある変数が使えないのでuseする書き方
これで$reccomendIdsが使えるようになる
コメント投稿