2017-01-19 2 views
1

타사를 이용합니다. 여기에서 얻을 : 파일 저장소에서 https://github.com/andersao/l5-repository페이지 매기기와 findwhere를 같은 방법으로 사용 하시겠습니까? (laravel 5.3)

내 함수는 다음과 같다 : 실행되면

public function displayList($year, $id = NULL) 
{ 
    $clauses = ['year' => $year]; 
    if(isset($id)) { 
     $clauses = array_merge($clauses, ['id' => $id]); 
    } 
    $query = Self::orderBy('programcode') 
       ->orderBy('accountcode') 
       ->findWhere($clauses) 
       ->paginate(1); 
    return $query; 
} 

는이 같은 오류가 존재한다 : Method paginate does not exist..

시도해 보겠습니다. ->findWhere($clauses). 그것은 작동합니다. 오류 없음.

Findwhere 분명히 동시에

이 문제에 대한 해결책이 있습니까 실행할 수 없습니다 페이지를 매기는?

답변

2

->findWhere(...)은 쿼리 with ->get()을 종료하고 그 결과 (웅변 컬렉션)를 반환하기 때문입니다.

당신이하려는 것은 eloquent collection에서 ->paginate(...) 메서드를 호출하는 것입니다. 실제로는 query builder의 메소드입니다.

솔루션

applyConditions

$query = Self::orderBy('programcode') 
      ->orderBy('accountcode') 
      ->applyConditions($clauses) 
      ->paginate(1); 

편집

좋아, ->applyCondtions() 개체를 반환하지 않습니다 그래서 당신 수 없습니다 그것의 오프 체인 방법. 이 시도 : 이것처럼

$query = Self::orderBy('programcode') 
    ->orderBy('accountcode'); 
$query->applyConditions($clauses); 
$query = $query->paginate(1); 
+0

무엇 자사의 솔루션을 계속 하시겠습니까? 문서에는'-> paginate (...)'가 있습니다. 여기를보세요 : https://github.com/andersao/l5-repository –

+0

@mosestoh 주위를 파고 나서 나는 해결책을 찾았다 고 확신합니다. 답변을 업데이트했습니다. – devk

+0

오류가 있습니다 :'부재중 전화 기능 paginate() on null ' –

1

을 :

$list = $this->repository->scopeQuery(function($query) use ($filterColumns) { 

    return $query->where($filterColumns)->orderBy('created_at', 'DESC'); 

}); 

$list->paginate(10);