I have an issue when I want to add where clauses to my pagination:
This works fine:
$builder = User::orderBy(
$criteria->getOrderBy(),
$criteria->getOrderWay()
)
->paginate(
$criteria->getPerPage(),
array('*'),
'',
$criteria->getPage()
);
return $builder;
If I want to add where conditions I can if I do the following (it works btw):
$builder = User::orderBy(
$criteria->getOrderBy(),
$criteria->getOrderWay()
)->where(array(array('state','=',0)))
->paginate(
$criteria->getPerPage(),
array('*'),
'',
$criteria->getPage()
);
return $builder;
But If I want to do this without chaining:
$builder = User::orderBy(
$criteria->getOrderBy(),
$criteria->getOrderWay()
);
$builder->where(array(array('state','=',0)));
$builder->paginate(
$criteria->getPerPage(),
array('*'),
'',
$criteria->getPage()
);
return $builder;
I get the following exception:
Call to undefined method Illuminate\Database\Query\Builder::lastPage()
So the pagination is not applied, but why?
How can I add where clauses without duplicating code like this?
$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;
}