2017-09-04 4 views
0

를 반환 :Laravel 모음 :이 유사한 컬렉션이 유일한 관계 키

$a = Model::with(['sub' => function($q) { 
    $q->select('id', 'name') 
}])->get(); 

이 다음 컬렉션을 반환 :

{ 
    0: { 
     id: 0001, 
     name: "item 1", 
     type: "type a" 
     'sub' [ 
      { 
       'id': 10001, 
       'name': "sub Item 1" 
      }, 
      { 
       'id': 10002, 
       'name': "sub Item 2" 
      } 
     ] 
    }, 
    1: { 
     id: 0002, 
     name: "item 2", 
     type: "type a" 
     'sub' [ 
      { 
       'id': 11001, 
       'name': "sub Item 4" 
      }, 
      { 
       'id': 11002, 
       'name': "sub Item 5" 
      } 
     ] 
    } 

내가 뭘하려고 부모 항목의 열쇠입니다 그들의 ID로만 관계를 반환합니다. 예를 들어

{ 
    0001: { 
     'sub' [ 
      { 
       'id': 10001, 
       'name': "sub Item 1" 
      }, 
      { 
       'id': 10002, 
       'name': "sub Item 2" 
      } 
     ] 
    }, 
    0002: { 
     'sub' [ 
      { 
       'id': 11001, 
       'name': "sub Item 4" 
      }, 
      { 
       'id': 11002, 
       'name': "sub Item 5" 
      } 
     ] 
    } 

나는이 기능을 사용할 수 없습니다. 나는 등 많은 변화를 시도했다 :

$a = Model::with(['sub' => function($q) { 
    $q->select('id', 'name') 
}])->pluck('sub', 'id'); 

'뽑는다'는 분명히 종료를하지 않는 '하위'의 이름으로 상위 모델의 속성을 찾고으로이 작동하지 않습니다. 이것을 달성 할 수있는 방법이 있습니까?

감사

답변

0

Sub::where(...)->get()->groupBy('parent_id')처럼 : Sub::where(...)를 선택하고 PARENT_ID에 수집 groupBy를 사용하기 쉽게하지 않을까요. pluck() 앞에 ->get()을 입력해야합니다.

$a = Model::with([ 
    'sub' => function ($q) { 
     $q->select('id', 'name'); 
    }, 
])->get()->pluck('sub', 'id'); 

당신의 예에서 사용 된 pluck()

pluck의 쿼리 빌더 버전이 아닌 컬렉션 버전이 될 것입니다.

희망이 도움이됩니다.

+0

이 솔루션은 키 '하위'를 결과에 유지하지 않습니다. 그러나, 내 실제 상황에서 이것은 문제가되지 않습니다. 감사합니다. – Typhoon101

+0

@ Typhoon101 Laravel의 어떤 버전을 사용하고 있습니까? –