Skip to content

Instantly share code, notes, and snippets.

@jsdecena
Last active August 28, 2018 02:29
Show Gist options
  • Save jsdecena/7767d4fa0f2866f43fa3e44aa4306560 to your computer and use it in GitHub Desktop.
Save jsdecena/7767d4fa0f2866f43fa3e44aa4306560 to your computer and use it in GitHub Desktop.
Filtering orders by query params in index method
/**
* @param array $params
*
* @param $orderBy
* @param $sortBy
*
* @return Collection
*
* Sample:
* `/orders?release_date_start=2018-01-01&release_date_end=2018-02-20&firm_id=3` OR
* `/orders?claimId=3&status=completed`
*
* Problem: Too many if statements
*
*/
public function findOrdersBy(array $params, $orderBy = 'id', $sortBy = 'asc'): Collection
{
$release_date_start = array_get($params, 'release_date_start');
$release_date_end = array_get($params, 'release_date_end');
$claimId = array_get($params, 'claimId');
$firm_id = array_get($params, 'firm_id');
$status = array_get($params, 'status');
$orders = $this->model->newQuery();
if (!is_null($release_date_start) && !is_null($release_date_end)) {
$orders->whereBetween('releaseDate', [$release_date_start, $release_date_end]);
} else {
if (!is_null($release_date_start)) {
$orders->where('releaseDate', '>=', $release_date_start);
} else {
if (!is_null($release_date_end)) {
$orders->where('releaseDate', '<=', $release_date_end);
}
}
}
if (!is_null($claimId)) {
$orders->where(compact('claimId'));
}
if (!is_null($firm_id)) {
$orders->orWhere(compact('firm_id'));
}
if (!is_null($status)) {
$orders->where(compact('status'));
}
return $orders->orderBy($orderBy, $sortBy)->get();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment