Laravel:查询只获取一个相关的id

时间:2016-10-03 06:31:42

标签: php mysql laravel

我试图获取与特定列表相关的所有id,但我的查询只返回表中的第一个相关id而不是其他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 Die and Dump)

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

我想产生如下结果

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

3 个答案:

答案 0 :(得分:0)

我不知道laravel但你正在从“List”到“List_Ref”进行左连接。 因此,Talbe列表中的每个条目都将与List_Ref的一个条目匹配。

尝试完全加入。

答案 1 :(得分:0)

不要使用groupBy('List.id')它会根据List表&的id对数据进行分组。总是只返回单个数据。

答案 2 :(得分: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 collection的groupBy和orderBy方法获取分组的项目。希望它能帮到你!