2017-10-19 11 views
0

게시물의 (페이지 번호가 매겨진) 목록을 검색하고 가장 최근의 댓글을 하나의 Eloquent 쿼리 문에 포함하려고합니다. 게시물과 댓글은 일대 다 관계로 연결됩니다. 모든 게시물과 가장 최근의 댓글을 1 개의 검색어로 검색하십시오.

내 시도했다 :

Post::with(['comments' => function ($query) { 
    $query->orderBy('created_at', 'asc')->take(3); 
}])->simplePaginate(15); 

그러나 그것은 단지 총에서 3 개의 댓글, 게시물 당없는 3 개의 댓글을 검색합니다.

+1

나는 laravel이 열정적으로로드 된 관계를 제한 할 수 있다고 생각하지 않습니다. 게시물 배열을 반복하여 제안하고 예를 들어 주석을로드하십시오. $ posts = Post :: simplePaginate (15); foreach ($ posts-> orderBy ('created_at', 'asc') -> take (3);}]) {$ post-> load ([주석 '=> 함수 ($ query) ' – pseudoanime

답변

0

업데이트] 당신이 한 쿼리와 함께 할 수없는 것 같다.

function lastComments() 
{ 
    return $this->hasMany('App\Post', 'post_id')->orderBy('created_at')->take(3); 
} 

당신은 정상 웅변 코드로 게시물을로드 :
당신은 여전히 ​​상위 모델에이 기능을 소위 "lastComments"할 수 있습니다

Post::simplePaginate(15); 

그리고보기 페이지에서 당신은 주석을 보여 이 방법 :

@foreach($post->lastComments as $comment) 
    <!-- ... --> 
@endforeach 
+0

동일한 결과가 나오는 것을 볼 수있는 한 총 3 개의 댓글 만로드됩니다. – Antiz

+0

나는 대답을 –

0

가입 테이블 이드
이 시도해야합니다 :

Post::with(array('comments'=>function($query){ 
      $query->select('id as commentid','comment')->orderBy('created_at', 'asc')->take(3); 
     }))->simplePaginate(15); 
+0

업데이트했습니다. 어떤 결과도 나에게 없었습니다. select 함수 ('comment')에 두 번째 인수를 사용하는 것은 무엇입니까? – Antiz

0

당신은 당신의 App\Post 모델의 $with 변수를 설정해야합니다

protected $with = ['lastComments']; 

당신이 게시물을 가져올 때마다이 방법은, Laravel은 자동으로에 대한 코멘트를로드합니다.