2017-04-25 11 views
2

私は改ページにどこ句を追加したいときに私は問題を持っている:ページネーションとwhere句

これは正常に動作します:

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

私はどこ条件IはI場合はすることができます追加したい場合(これはところで動作します)次の手順を実行します。

$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; 

私は、次の例外を取得:未定義のメソッドを照らし\ Databaseへ

コール\クエリー\ビルダー:: LASTPAGE()

だから改ページは適用されますが、なぜされていませんか?

このようなコードを複製せずに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-> where(... –

+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

はい、ありがとう、私の悪い。 –

+1

'$ builder-> paginate'の代わりに' $ builder = $ 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;