質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

2回答

918閲覧

Laravelで一件ずつ取得したeloquentモデルを連結すには

退会済みユーザー

退会済みユーザー

総合スコア0

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2017/10/11 02:34

$u1 = User->whrer('id', 1)->first();
$u2 = User->whrer('id', 2)->first();

このときu1とu2を集合のeloquentモデルとしてくっつけたいです

くっつけ方が知りたいの、あれば教えてください

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masaya_ohashi

2017/10/11 02:44

くっつける、というのは具体的にどのような形のデータ2つをくっつけて、どのような形になることを望まれているのかを記載してください。
退会済みユーザー

退会済みユーザー

2017/10/11 02:55

最終的に以下で取得できるようなデータになれば良いです。User->where('id',1)->where('is',2)
masaya_ohashi

2017/10/11 02:57

それだとidが1かつisが2ですが、誤字ですか?結果として欲しいのは「idが1、idが2のモデルの配列」ということですか?
退会済みユーザー

退会済みユーザー

2017/10/11 03:10

誤字です。idです
guest

回答2

0

個々で取得したモデルインスタンスをコレクションでまとめたいのであれば、以下でできるかと思います。

$u1 = User->whrer('id', 1)->first(); $u2 = User->whrer('id', 2)->first(); $items = collect([$u1,$u2]);

Laravel 5.5 コレクション

投稿2017/10/11 23:57

aro10

総合スコア4106

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

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が使えるのはクエリオブジェクトであり、モデルオブジェクトではありません。getfirstを使った時点でそれはすでにクエリオブジェクトではなくなるので、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には配列のソートができる関数がたくさん用意されており、配列にしてしまえばソートが可能です。オブジェクトの中の特定の値でソートしたい場合はuasorthttp://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});

投稿2017/10/11 03:17

編集2017/10/12 00:14
masaya_ohashi

総合スコア9206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/10/11 03:21

firstでとったものを、くっつける方法が知りたいのですが、それはないと言うことですか?
masaya_ohashi

2017/10/11 03:22

あなたのおっしゃる「くっつける」とは「配列にする」という認識でよいですか?
退会済みユーザー

退会済みユーザー

2017/10/11 12:31

いえ、ordeyBy()とかが使えるオブジェクトにしたいです
退会済みユーザー

退会済みユーザー

2017/10/12 16:23

ありがとうございます。非常に分かりやすかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問