2017-05-18 1 views
2

중첩.웅변 내가 <strong>사진을 객체가 <strong>카테고리</strong>과 <strong>하위 범주</strong>이</strong><strong>의 객체</strong>을 업로드 <strong>사용자</strong>있어 특정 개체를 촬영을 목표로하는 온라인 경쟁을 위해 WHERE 문

사용자의 대시 보드는 다음과 같이 보일 것이다 : 해당 루프의 사진을 출력 할 수 있도록하기 위해

------------------------------------------------ 
    |    Category      | 
    ------------------------------------------------ 
    | ----------------------------------------- | 
    | | Subcat.   | Subcat.   | | 
    | |------------------|--------------------| | 
    | |Object1 | Object2 | Object1 | Object2 | | 
    | |------------------|--------------------| | 
    | | Pic1 | Pic1 | Pic1 | Pic1  | | 
    | | Pic2 | Pic2 | Pic2 | Pic2  | | 
    | ---------------------------------------- | 
    |            | 
    ------------------------------------------------ 

, 나는 모델 사이 hasMany의 관계를 설치했다. 난 단지 특정 사용자의 이미지를 원하는 물론 대시 보드를 들어

: 그래서

$userPics = Category::with(['subcats','subcats.objects','subcats.objects.pics'])->get(); 

질문하여 편리한 계층 구조와 객체를 얻을 수 사진 모델은 필드를 USER_ID 포함 . 내가 직접 사용자의 사진을 얻을 수 있습니다 : Pictures::where('user_id',$user->id)->get();,하지만 위의 원하는보기를 만들 개체의 구조를 가지고 있지 않습니다.

어떻게 같은 것을 할 수있는 팁을

$userPics = Category::with([...])->where('user_id',$user->id)->get(); 

많은 감사를!

답변

1

당신은 지정된 사용자에 속하는 사진과 함께 범주를 얻으려면, 그래서 당신은 (자세한 조금) 이렇게 : 당신이 두 개 이상을로드 할 수 있기 때문에

Category::with(['subcats', 'subcats.objects' => function ($q) use ($user) { 
     $q->with(['pictures' => function ($q) use ($user) { 
      $q->where('user_id', $user->id); 
     }]); 
    }]) 
    ->whereHas('subcats', function ($q) use ($user) { 
     $q->whereHas('objects', function ($q) use ($user) { 
      $q->whereHas('pictures', function ($q) use ($user) { 
       $q->where('user_id', $user->id); 
      }); 
     }); 
    }) 
    ->get(); 

당신은 여기 중첩 with() 클로저를 사용할 필요를 점 표기법을 사용하여 관계 수준.

사진 및 하위 카테고리 데이터를로드 할 필요가없는 경우 with() 부분 만 제거하면됩니다.

하위 카테고리를 필터링하려면 with()subcats의 클로저를 추가하십시오.

+0

놀랍도록 빠른 답변입니다. 네, 실제로이 필터는 사용자의 사진 만 필터링합니다. 그러나 범주/하위 범주/개체는 모두 여전히 출력됩니다. 나는 사용자가 그림을 가지고있는 사람들 만 가지고 싶습니다. 나는 어떻게 그것을 성취 할 것인가? –

+0

@MichielvanNesselrooij 업데이트, 보시기 바랍니다. 그림 및 하위 카테고리 데이터를로드 할 필요가없는 경우'with() '부분 만 제거하면 지정한 사용자의 사진이있는 범주 만 표시됩니다. –

+1

환상적. 사실 'whereHas'가없는 쿼리의 결과도 필요하므로 답은 이중 목적으로 사용됩니다. 나는 당신에게 대답을주었습니다. 고맙습니다. –