2016-10-03 58 views
0

我試圖獲取與特定列表相關的所有ID,但我的查詢只返回表中的第一個相關ID,而不是其他相關ID。Laravel:查詢只獲取一個相關的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 
    } 
] 

我WOU ld喜歡產生如下結果

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

您是否正在嘗試替換get() - > all() –

+0

如果您刪除了group by,您將獲得所需的所有結果。 –

+0

@MubasharAbbas我需要將所有'data_id'分組到一個列表 –

回答

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_Ref的一個條目匹配。

嘗試完全加入。

0

不要使用groupBy('List.id')它會根據List表&的ID對數據進行分組總是隻返回單個數據。

+0

謝謝。我現在明白了。當我刪除'groupBy()'它顯示了我的2個數組項目與偉大的ID。但我想分組所有的ID與列表相關。 in 1 array –

+0

我不是laravel人,但是對於那種情況,查詢應該是:select group_concat(List_Ref.id)ids,blah ... blah ... group by List.id –

+0

你可以使用'whereRaw'來實現某些東西像上面那樣。 ' - > whereRaw('GROUP_CONCAT(List_Red.id)')' – ash