php
1$users = User::whereIn('id', [1, 2])->get();
こうすればidが1のもの、idが2のものを配列で受け取れます。whereIn('id', [1,2])
の部分が「idが1、または2」を表しており、get()
が「条件に合うものを全て取得」です。
first()
は「条件にあうものの中で1番目のものを取得」なので、first()
で取ったら配列じゃなくなります。
追記
ordeyBy()とかが使えるオブジェクトにしたいです
orderBy
が使えるのはクエリオブジェクトであり、モデルオブジェクトではありません。get
やfirst
を使った時点でそれはすでにクエリオブジェクトではなくなるので、orderBy
を使いたいならそれらの「前」にやらなければいけません。orderBy
の処理はLaravelがDBへの問い合わせにORDER BY
を使うための準備であり、すでにget
等で問い合わせした後では使えないのが道理です。
php
1$query = User::where('id', 1);
2// $query->orderBy('id', 'ASC'); はできる
3
4$model = $query->first();
5// $model->orderBy(); はできない
どうしてもDBから取得したあとに並び替えがしたいのであれば、aro10さんの回答のようにcollection
でまとめてしまうことで、Collection#sortBy
などが使えます。
php
1$collection = collect([$u1, $u2]);
2$sorted = $collection->sortBy('email'); // 各Userのemailで昇順に並び替えたものが取得できる
また、phpには配列のソートができる関数がたくさん用意されており、配列にしてしまえばソートが可能です。オブジェクトの中の特定の値でソートしたい場合はuasort
http://php.net/manual/ja/function.uasort.phpがよいでしょう。
php
1$array = [$u1, $u2];
2uasort($array, function($a, $b) {
3 return strcmp($a->email, $b->email);
4});