2017-05-23 6 views
0

하나의 조건으로 Laravel에서 여러 연결을로드 열망하는 각 보드에 해당 쓰레드를 생성했습니다. 내가 시도 위에 넣을 어떤 다양한 변종, 나는 스레드도 사용자도를로드 할 수있는 방법을내가 열망 부하에 포럼 모델을 노력했지만, 나는 또한 포럼에 대한 모든 보드뿐만 아니라 가장 최근의 실 사용자가 필요 협회

public function show($forum) 
{ 

    $forumCol = Forum::with([ 
     'boards' => function($query) { 
      return $query->with(['threads' => function($query) { 
       return $query->with('user')->latest()->first(); 
      }])->get(); 
     } 
    ])->where('id', $forum)->first(); 

    return view('forum.forum', ['forum' => $forumCol]); 
} 

그러나 아무리 : 광범위한 연구 후이 내 접근하고있다. $ forum 변수로 페이지를 dd '할 때. 포럼 및 관련 보드가있는 콜렉션을 얻었지만 아직 스레드가 빈 콜렉션으로로드되고 있습니다 (따라서 사용자를로드 할 수 없음).

이 열렬한로드에 대한 구문이 올바르지 않습니까? 나는 2 시간 동안이 일을 해왔고 어떤 도움이라도 대단히 감사 할 것입니다.

감사

편집 : Sandeesh, 즉 나뿐만 아니라 생각,하지만 난 이미 시도했던 스레드가 여전히 빈 모음거야. 또한, 당신의 궁금증에 대해 모든 관계를 점검하고 완벽하게 작동합니다. 나는이 문제를 해결하는 방법을 사람이 호기심 경우 Image of $forum collection

, 그 아래에 대한 답변 : 여기에 $ 포럼 모음의 스크린 샷이다.

답변

0

이것은 오랜 시간이 걸렸지 만 마침내 대답을 찾았습니다! one 연관 단지, 내가 할 수있는 열망로드 대신 조건이있는의, 그리고

public function latestThread() 
{ 
    return $this->hasOne('ReadIt\Thread')->latest(); 
} 

:

모델 관계의 나머지 : 연구의 많은 후, 나는이 방법을 제안하는 웹 사이트를 건너 발견 다음과 같이하십시오 :

$forumCol = Forum::with(
     'boards', 
     'boards.latestThread', 
     'boards.latestThread.user' 
    )->where('id', $forum) 
    ->first(); 

나는 처음에 매우 회의적이었습니다. 나는 그것을 테스트하고 그것은 작동합니다. 관계가 hasMany 인 경우에도 hasOne을 사용할 수 있으며 첫 번째 관계를 가져옵니다. 이제 왜 가장 최근의 스레드를 얻을 수 있는지 나중에 정리할 수 있는지 확신 할 수 없지만 작동합니다!

희망이 있으면 도움이됩니다.

0

열망 로딩 제약 쿼리 빌더가 아닌 집합을 반환해야합니다. 귀하의 실수는 first()get()입니다. 수익을 사용할 필요가 없습니다.

public function show($forum) 
{ 
    $forumCol = Forum::with(['boards' => function($query) { 
     $query->with(['threads' => function($query) { 
      $query->with('user')->latest()->take(1); 
     }]); 
    }])->where('id', $forum)->first(); 

    return view('forum.forum', ['forum' => $forumCol]); 
} 
+0

수정 됨 – Dastur

+0

당신의 관계를 확인하는 것은 문제가 있음을 확인하는 것입니다.이 포럼을 시도해보십시오 : ('boards.threads') -> ('id', $ forum) -> first();' :: with ('boards.threads.user') -> where ('id', $ forum) -> first();'그리고 관련 데이터가 통과하는지 확인하십시오. – Sandeesh

+0

예, 아마도 take 메서드가 제약 조건에서 작동하지 않을 것이라고 생각합니다. – Dastur