2017-01-19 117 views
1

我使用第三方。我從這裏得到:https://github.com/andersao/l5-repository如何使用paginate並找到相同的地方? (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

存在錯誤:'調用null上的成員函數paginate()'# –

1

像這樣:

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

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

}); 

$list->paginate(10);