Laravelの雄弁、列の値に基づいてコレクションを作成します

雲海:

私は次のような例のテーブルを持っています:

| id | is_new | cate |
| 0  |   1    | [5]  |
| 1  |   1    | [5]  |
| 2  |   1    | [7]  |
| 3  |   1    | [6]  |

私は次の関数を呼び出した後

   $product = Products::where('is_new', 1)->get();

コレクションは、次のようなデータ構造を有しています

Collection {#1284 ▼
  #items: array:4 [▼
    0 => Products {#1285 ▶}
    1 => Products {#1286 ▶}
    2 => Products {#1287 ▶}
    3 => Products {#1288 ▶}
  ]
}

:私はまたを通じてカテゴリIDのリストを返すことができます

    $category = Category::where('type', 2)->pluck('id')->all();  

不思議Iケイトに基づいて、次の構造(または類似)を達成するために、何か良い方法があります。私はそれを行うには良い方法があると思いますし、手動で新しいコレクションに追加$カテゴリをループでそれを作成するために強引な方法を使用することができます。

Collection {#1284 ▼
  #items: array:3 [▼
    5 => array:2 [▼
         0 => Products {#1285 ▶}
         1 => Products {#1286 ▶}
         ]
    6 => Products {#1287 ▶}    or  6 => array:1 [ 0 => Products {#1287 ▶} ]
    7 => Products {#1288 ▶}
  ]
}

回答に基づいてソリューション更新日:

$product->groupBy(function($item) {
        return $item['cate'][0]; //because the entry is a list
    });
megubyte:

あなたは、のようなものを使用して見てみる必要がありgroupBy、一緒のグループにカテゴリを。これは、データベースレベルで行うことができます(あなたが持っていると仮定すると、参照整合性の外部キーを持つ)を。あなたはまた、(あなたはそれが配列かのインスタンスである場合のチェックを行う必要はありません物事をより一貫性のようになりますこれは、何が返されることは各カテゴリの配列であることを保証を得るでしょうProducts、その後、)。

あなたのカテゴリは配列と同じように保存されている場合は、データベースのレイアウトを変更する必要があるかもしれませんが、このために、あなたは中間のテーブルを使用する必要があります-を見て、多くの関係に多くを

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=23996&siteId=1