2017-10-13 9 views
3

で別々の配列として、私は、この表でグループはlaravelのPHP

| id | category | size | created_at   | updated_at | deleted_at | 
+----+----------+------+---------------------+------------+------------+ 
| 1 | Regular | S | 2017-10-11 09:35:14 | NULL  | NULL  | 
| 2 | Regular | XS | 2017-10-11 09:39:34 | NULL  | NULL  | 
| 3 | Regular | M | 2017-10-11 09:39:37 | NULL  | NULL  | 
| 4 | Regular | xxl | 2017-10-11 13:03:52 | NULL  | NULL  | 
| 5 | Regular | l | 2017-10-11 13:03:59 | NULL  | NULL  | 
| 6 | Regular | xm | 2017-10-11 13:04:03 | NULL  | NULL  | 
| 7 | Small | em | 2017-10-11 13:05:04 | NULL  | NULL  | 
| 8 | standard | em | 2017-10-13 07:16:50 | NULL  | NULL  | 

size_chartテーブルの上に私はいくつかのサンプルデータを持っています。私はグループに

Regular = [s,xs,M,l,xm] 
standard = [em] 
small = [em] 

For.eg

カテゴリ に基づいてサイズを必要とする私のPHPのコントローラ機能でこれを達成

public function sizeFetch(Request $request){ 
     $cat_id = $request->id; 
     $size_id = SizeCategory::where('category_id',$cat_id)->pluck('size_id'); 
    $size_details = SizeChart::whereIn('id',$size_id)->get(); 

     return $size_details; 
    } 

今、この

[ 
{ 
id: 1, 
category: "Regular", 
size: "S", 
created_at: "2017-10-11 09:35:14", 
updated_at: null, 
deleted_at: null 
}, 
{ 
id: 2, 
category: "Regular", 
size: "XS", 
created_at: "2017-10-11 09:39:34", 
updated_at: null, 
deleted_at: null 
}, 
{ 
id: 3, 
category: "Regular", 
size: "M", 
created_at: "2017-10-11 09:39:37", 
updated_at: null, 
deleted_at: null 
}, 
{ 
id: 7, 
category: "Small", 
size: "em", 
created_at: "2017-10-11 13:05:04", 
updated_at: null, 
deleted_at: null 
} 
] 

のように、この関数の戻りくださいする方法この問題を解決する手助けをしてください

+1

使用 'groupby'(SQLでGROUP BYは、おそらく代わりにAGGREGATE BYと呼ばれている必要があります)。 – urfusion

+0

サイズを選択し、カテゴリ別にグループ化します。私は雄弁にこれをする方法があまりにも確信していますが。 – hungrykoala

+0

この 'SizeChart :: whereIn( 'id'、$ size_id) - > groupBy( '​​category') - > get();を試してください。 – Maraboc

答えて

2

については SizeCategory::where('category_id',$cat_id)->groupBy('size')->pluck('size_id');

あなたがグループ化を行う場合は、結果を取得した後、それはおそらく簡単です。クエリ内でのグループ化の問題は、実際には期待通りのことをしないということです。クエリで

public function sizeFetch(Request $request){ 
    $cat_id = $request->id; 
    $size_id = SizeCategory::where('category_id',$cat_id)->pluck('size_id'); 
    $size_details = SizeChart::whereIn('id',$size_id) 
     ->get()->groupBy("category") //Group by category 
      ->map(function ($group) { 
        return $group->pluck("size"); //Pluck size from each category member 
      }); 

    return $size_details; 
}