2016-10-03 2 views
0

特定のリストに関連するすべてのIDを取得しようとしていますが、クエリではテーブル内の最初の関連IDのみが返されます。Laravel:クエリは1つの関連IDをフェッチしています

テーブル

List  | id | person_id | name  | description 
      | 1 | 10  | Test List | null 

List_Ref | id | list_id | data_id 
      | 1 | 1   | 100 
      | 2 | 1   | 101 

クエリ

$lists = DB::table('List') 
    ->leftJoin('List_Ref', 'List_Ref.list.id', '=', 'List.id') 
    ->select('List.id', 'List.name', 'List_Ref.data_id') 
    ->where('person_id', Auth::user()->person_id) 
    ->groupBy('List.id') 
    ->orderBy('List.id') 
    ->get(); 

結果(Laravelが死ぬとダンプ)

#items: array:1 [ 
    0 => { 
    "id"  : 1 
    "name" : "Test List" 
    "data_id" " 100 
    } 
] 

I WOU次のような結果を出すのが好きです

#items: array:1 [ 
    0 => { 
    "id"  : 1 
    "name" : "Test List" 
    "data_id" => { 
     "id" : 100 
     "id" : 101 
    } 
    } 
] 
+0

get() - > all() –

+0

を置き換えようとしていますか?グループを削除すると、必要なすべての結果が得られます。 –

+0

@MubasharAbbasすべての 'data_id'が1つのリストにグループ化されている必要があります –

答えて

0

利用可能なグループ化アイテムを取得する場合は、クエリを作成する際にgroup byを使用しないでください。

は次のように行います

$lists = DB::table('List') 
    ->leftJoin('List_Ref', 'List_Ref.list.id', '=', 'List.id') 
    ->select('List.id', 'List.name', 'List_Ref.data_id') 
    ->where('person_id', Auth::user()->person_id) 
    ->get(); 

$lists->groupBy('List.id')->orderBy('List.id'); 

使用laravelコレクションのGROUPBYとORDERBYメソッドがグループ化されたアイテムを取得します。それがあなたを助けることを願って!

+0

あなたにはあまりにもありがとうございました。これはすべてのコードを変更することなく100%作業しました。よくやった –

0

私はlaravelを知っていませんが、 "List"から "List_Ref"への左結合を行っています。 Talbe Listのすべてのエントリは、List_Refの1つのエントリと一致します。

フル参加を試してください。

0

使用しないgroupBy('List.id')リストテーブルのIDに基づいてデータをグループ化します。&は常に1つのデータのみを返します。

+0

ありがとうございます。私は今それを理解する。私が 'groupBy()'を削除すると、IDの大きい2つの配列アイテムが表示されます。リストに関連するすべてのIDをグループ化したいと思います。 in 1 array –

+0

私はlaravel personではありませんが、その場合クエリは次のようにする必要があります:select group_concat(List_Ref.id)ids、blah ... blah ... group by List.id –

+0

あなたは何かを達成するために 'whereRaw'を使うことができます上記のように。 ' - > whereRaw( 'GROUP_CONCAT(List_Red.id)')' – ash

関連する問題