2017-05-22 4 views
0

숫자를 사용하여 컬렉션을 그룹화하려면 어떻게해야합니까? 그래서 숫자를 받아들이고 그 숫자를 사용하여 반환 된 콜렉션을 그룹화하는 메소드를 만들었습니다. 따라서 4를 전달하면 4로 그룹화됩니다. 다음은 데이터의 원래 구조입니다.Laravel, 개수로 컬렉션을 그룹화하는 방법

{ 
    'A': [{ 
     id: 1, 
     id: 2, 
     id: 3, 
     id: 4, 
     id: 5, 
     id: 6, 
     id: 7 
    }], 
    'B': [{ 
     id: 1, 
     id: 2, 
     id: 3 
    }], 
    'C': [{ 
     id: 1, 
     id: 2, 
     id: 3, 
     id: 4 
    }] 
} 

이제이 방법으로 데이터를 포맷해야합니다.

{ 
    'A': [{ 
     1: [{ 
      id: 1, 
      id: 2, 
      id: 3, 
      id: 4 
     }], 
     2: [{ 
      id: 5, 
      id: 6, 
      id: 7 
     }] 
    }], 
    'B': [{ 
     1: { 
      id: 1, 
      id: 2, 
      id: 3 
     } 
    }], 
    'C': [{ 
     1: [{ 
      id: 1, 
      id: 2, 
      id: 3, 
      id: 4 
     }] 
    }] 
} 

여기 내 코드입니다.

public function getAllPlayers(num) 
{ 
    $data = Player::orderBy('familyName', 'asc') 
     ->join('teams', 'players.primaryClubId', '=', 'teams.clubId') 
     ->select(['players.*', 'teams.teamName', 'teams.teamNickname', 'teams.teamCode']) 
     ->get() 
     ->unique() //remove duplicates 
     ->groupBy(function($item, $key) { //group familyName that starts in same letter 
      return substr($item['familyName'], 0, 1); 
     }); 

    return $data; 
} 

저는 이것을 laravel에서 정말 힘들게 풀고 있습니다. 5.4 버전을 사용하여 Btw 메신저. 어떤 도움이라도 미리 감사드립니다.

+0

현재의 입력과 결과 구조는 명확하지 않다. 우선 배열의 JSON 구조처럼 보이며 마지막 값이 값 ID를 덮어 씁니다. 문제가 해결 될 수 있도록 고유 한 값으로 더 나은 샘플을 제공하십시오. –

답변

1

이 같은 map 기능을 사용해보십시오 :

$data = Player::orderBy('familyName', 'asc') 
    ->join('teams', 'players.primaryClubId', '=', 'teams.clubId') 
    ->select(['players.*', 'teams.teamName', 'teams.teamNickname', 'teams.teamCode']) 
    ->get() 
    ->unique() 
    ->groupBy(function($item, $key) { 
     return substr($item['familyName'], 0, 1); 
    }) 
    ->map(function ($subCollection) { 
     return $subCollection->chunk(4); // put your group size 
    });