2017-04-25 92 views
2

我有一個問題,當我要添加哪裏條款,以我的分頁:分頁和WHERE子句

這工作得很好:

$builder = User::orderBy(
     $criteria->getOrderBy(), 
     $criteria->getOrderWay() 
    ) 
    ->paginate(
     $criteria->getPerPage(), 
     array('*'), 
     '', 
     $criteria->getPage() 
    ); 
    return $builder; 

如果我想補充那裏的條件我可以的,如果我做到以下幾點(它的工作原理BTW):

$builder = User::orderBy(
    $criteria->getOrderBy(), 
    $criteria->getOrderWay() 
)->where(array(array('state','=',0))) 
->paginate(
    $criteria->getPerPage(), 
    array('*'), 
    '', 
    $criteria->getPage() 
); 
return $builder; 

但如果我想這樣做沒有鏈接:

$builder = User::orderBy(
     $criteria->getOrderBy(), 
     $criteria->getOrderWay() 
    ); 
$builder->where(array(array('state','=',0))); 
    $builder->paginate(
     $criteria->getPerPage(), 
     array('*'), 
     '', 
     $criteria->getPage() 
    ); 
    return $builder; 

我得到以下異常:

調用未定義的方法照亮\數據庫\查詢\生成器::末頁()

所以分頁不適用,但是爲什麼呢?

如何在不重複代碼的情況下添加where子句?

$arrClauses = /** example **/; 

if(empty($arrClauses)) { 
     $builder = User::orderBy(
      $criteria->getOrderBy(), 
      $criteria->getOrderWay() 
     ) 
     ->paginate(
      $criteria->getPerPage(), 
      array('*'), 
      '', 
      $criteria->getPage() 
     ); 
     return $builder; 
} else { 
    $builder = User::orderBy(
     $criteria->getOrderBy(), 
     $criteria->getOrderWay() 
    )->where($arrClauses) 
    ->paginate(
     $criteria->getPerPage(), 
     array('*'), 
     '', 
     $criteria->getPage() 
    ); 
    return $builder; 
} 
+1

我不知道它是否會做,但嘗試將其存儲在一個變量而不是鏈接它。 $ builder = $ builder->其中(... –

+0

是的,這工作,不得不檢索實例 –

回答

2

由於您返回的是查詢生成器實例而不是LengthAwarePaginator實例,所以出現此錯誤。這樣做是爲了它的工作:

$builder = User::orderBy(
    $criteria->getOrderBy(), 
    $criteria->getOrderWay() 
); 
$builder = $builder->where(array(array('state','=',0))); 
$builder = $builder->paginate(
    $criteria->getPerPage(), 
    array('*'), 
    '', 
    $criteria->getPage() 
); 
return $builder; 
+1

謝謝,我很累 –

1

你的問題是你是不是串聯的查詢,這應該工作:

$arrClauses = /** Your clauses **/; 

$builder = User::orderBy(
    $criteria->getOrderBy(), 
    $criteria->getOrderWay() 
); 
if(!empty($arrClauses)) { 
    $builder = $builder->where($arrClauses); 
} 
$builder = $builder->paginate(
    $criteria->getPerPage(), 
    array('*'), 
    '', 
    $criteria->getPage() 
); 
return $builder; 
+0

是的,謝謝,我的壞。我會標記阿列克謝Mezenin作爲正確的答案,因爲他迴應 –

+1

這不會起作用,因爲它應該是'$ builder = $ builder-> paginate'而不是'$ builder-> paginate' –

+1

@AlexeyMezenin真的,好看的眼睛我沒有看到它:) – Troyer

0

希望這將幫助你

$builder = User::orderBy(
       $criteria->getOrderBy(), 
       $criteria->getOrderWay() 
      ); 
    if(!empty($arrClauses)) 
    $builder = $builder->where($arrClauses); 
       $builder->paginate(
       $criteria->getPerPage(), 
       array('*'), 
       '', 
       $criteria->getPage() 
      ); 
      return $builder;