2017-10-17 8 views
0

Status 각 인스턴스에 많은 자식 상태/설명이 포함될 수있는 모델이 있습니다. 나는이 관계 기능의 방법으로 이러한 의견을 수집 할 수있어 : Eloquent를 사용하여 새 레코드를 적절하고 효율적으로로드하는 방법

public function comments() { 
    return $this->hasMany('App\Models\Status', 'parent_id'); 
} 

지금 웹 페이지의 초기로드에서, 각각의 상태는 4 개의 코멘트 (마지막 4 개 최근 댓글)의 최대 표시됩니다. 지금하고 싶은 일은 다음과 같습니다.

"추가 설명보기"버튼을 선택하면 끝점에 대한 AJAX 요청을 작성하여 이전 20 개의 최신 코멘트를 가져 와서 페이지에 렌더링합니다. 나는 AJAX를 잘 만들었고 심지어 렌더링까지 설정할 수 있었지만 다음 렌더링 세트의 덩어리가 아닌 2020의 다음 덩어리가 아닌 모든 주석을 이미 잡았다.

Eloquents Chunk Method, Take Method 또는 Splice Method을 사용 하시겠습니까? 또는 다른 일련의 방법의 조합?

답변

0

페이지 매김을 사용하십시오.

$status = Status::find(1); 
$comments = $status->comments() 
    ->latest() // Equivalent to: orderBy('created_at', 'desc') 
    ->skip(4) 
    ->paginate(20); 

그리고 당신의 AJAX 요청을 할 때, 중 하나 POST 또는 GET 매개 변수로 요청이있는 page 값을 전달합니다.

+0

문서를 읽었는데 뭔가가 여전히 모호합니다. 그래서 A)는 이미 4 개의 초기 코멘트가로드되어있는 것입니다. 어떻게 처음 4 개 이후의 페이지 매김을 시작할 수 있습니까? B)는'page' 값이 동일한 레코드를 다시 페이지 매김하지 않도록 보장합니다. –

+0

첫 번째 네 가지 결과가 나온 후에 페이지 이동을 시작하려면 '건너 뛰기 (4)'할 수 있어야합니다 (주문하지 않았으므로 필요할 수도 있음). 그리고 나는 당신의 (b) 질문을 오해 할 수도 있습니다 - 당신은 페이징 가치를 유지할 필요가 있습니다. JSON을 프런트 엔드로 반환하는 경우 상위 주석, 데이터 속성 또는 이와 유사한 것으로 유지 될 수 있습니다. – fubar

+0

다음과 같은'PHP Fatal 오류가 발생했습니다 : 'Illuminate \ Pagination \ Paginator'를 사용하는 중에 'Illuminate \ Pagination \ Paginator'가 vendor/illuminate/database/Eloquent/Builder.php의 485 행에 없습니다. 문 내 모델 상단에 –

0

무엇이든지간에 가장 잘 보이는 것이 무엇이든지 문제를 해결합니다. 그러나 laravel의 영역에서 벗어나지 않도록하십시오. 그러나 제 의견으로는 여기서 Pagination의 개념이 유용 할 수 있습니다. 매우 쉽고 많은 방법이 있습니다.

관련 문제