前提・実現したいこと
LaravelのCollection同士を結合
(イメージとしてはDB left join)
そのコマンドがあるかどうか?
データベース(案)
Collection出力の元となるデーターベースです。
users
id | name |
---|---|
1 | 名前1 |
2 | 名前2 |
3 | 名前3 |
titles
id | name |
---|---|
1 | タイトル1 |
2 | タイトル2 |
3 | タイトル3 |
items
id | title_id | name |
---|---|---|
1 | 1 | アイテム1 |
2 | 1 | アイテム2 |
3 | 1 | アイテム3 |
4 | 2 | アイテム4 |
5 | 2 | アイテム5 |
6 | 2 | アイテム6 |
7 | 3 | アイテム7 |
8 | 3 | アイテム8 |
9 | 3 | アイテム9 |
datas
id | user_id | title_id | item_id |
---|---|---|---|
1 | 1 | 1 | 2 |
2 | 1 | 2 | 5 |
3 | 1 | 3 | 8 |
以上のデータベースから
datasより名前1(user_id 1)のデータを以下のように出力し
結果
php
1$collection = collect([ 2 ['id' => 1, 'title' => 'タイトル1', 'value' => 2,'name' => 'アイテム2'], 3 ['id' => 2, 'title' => 'タイトル2', 'value' => 5,'name' => 'アイテム5'], 4 ['id' => 3, 'title' => 'タイトル3', 'value' => 8,'name' => 'アイテム8'] 5]);
以上の構成であればデーターベースでやれば簡単なのですが、
それをCollectionで似たようなことが、できないかというのが今回の質問の意図です。
また理由の1つに、上記のテーブルが一部jsonデータで保存されていた場合にどのようにすればいいかと方法に悩んでしまいました。
Collectionであれば以下の方法でjsonデータをcollect化できますので。。
collect(json_encode(jsonデータ))
質問
2つのCollectionを結合して1つのCollectionデータを作成を考えています。
php
1$collection_a = collect([ 2 ['id' => 1, 'value' => 2], 3 ['id' => 2, 'value' => 5], 4 ['id' => 3, 'value' => 8], 5]); 6 7$collection_b = collect([ 8 ['id' => 1, 'title' => 'タイトル1', 9 'items'=>[ 10 ['id' => 1, 'name' => 'アイテム1'], 11 ['id' => 2, 'name' => 'アイテム2'], 12 ['id' => 3, 'name' => 'アイテム3'] 13 ] 14 ], 15 ['id' => 2, 'title' => 'タイトル2', 16 'items'=>[ 17 ['id' => 4, 'name' => 'アイテム4'], 18 ['id' => 5, 'name' => 'アイテム5'], 19 ['id' => 6, 'name' => 'アイテム6'] 20 ] 21 ], 22 ['id' => 3, 'title' => 'タイトル3', 23 'items'=>[ 24 ['id' => 7, 'name' => 'アイテム7'], 25 ['id' => 8, 'name' => 'アイテム8'], 26 ['id' => 9, 'name' => 'アイテム9'] 27 ] 28 ] 29]);
以上の2つのCollectionを以下のように出力を考えています。
php
1$collection_c = collect([ 2 ['id' => 1, 'title' => 'タイトル1', 'value' => 2,'name' => 'アイテム2'], 3 ['id' => 2, 'title' => 'タイトル2', 'value' => 5,'name' => 'アイテム5'], 4 ['id' => 3, 'title' => 'タイトル3', 'value' => 8,'name' => 'アイテム8'] 5]);
foreachで回す方法しかないのでしょうか?
まわりくどい方法は思いつくのですが
Laravel自体はまだ始めたばっかで適切なコマンド・方法があるかと思った次第です。

回答2件
あなたの回答
tips
プレビュー