Skip to content

Instantly share code, notes, and snippets.

@mccabiles
Created May 28, 2019 07:33
Show Gist options
  • Save mccabiles/9e24007c8c297ba6ac63fa933ac1c87e to your computer and use it in GitHub Desktop.
Save mccabiles/9e24007c8c297ba6ac63fa933ac1c87e to your computer and use it in GitHub Desktop.
Laravel Controller model filtering and pagination using request queries.
class ResourceController
{
public function paginate($query, $current_page = 1, $items_per_page = 25)
{
$count = $query->count();
$data = $query->skip($items_per_page * ($current_page - 1))->take($items_per_page)->get();
$pages = ceil($count / $items_per_page);
return [
'count' => $count,
'pages' => $pages,
'data' => $data,
];
}
public function queryModel($model, $request) {
$models = $model;
foreach ($request->query('where', []) as $field => $value) {
$models = $models->where($field, '=', $value);
}
foreach ($request->query('orWhere', []) as $field => $value) {
$models = $models->orWhere($field, '=', $value);
}
foreach ($request->query('whereNot', []) as $field => $value) {
$models = $models->where($field, '!=', $value);
}
foreach ($request->query('whereLike', []) as $field => $value) {
$models = $models->where($field, 'like', '%' . $value . '%');
}
if ($request->has('whereBefore')) {
$date = new Carbon($request->query('whereBefore'));
$models = $models->whereDate('created_at', '<=', $date->toDateString());
}
if ($request->has('whereAfter')) {
$date = new Carbon($request->query('whereAfter'));
$models = $models->whereDate('created_at', '>=', $date->toDateString());
}
return $models;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment