From 0c3da71a574fdf870bb2e0e60b4faed43277a85e Mon Sep 17 00:00:00 2001 From: Ramon Gutierrez Date: Sun, 14 Jan 2018 15:32:18 +0800 Subject: [PATCH] Apply where filters to pagination query --- src/Controller/BatteryController.php | 43 +++++++++++-------- .../BatteryManufacturerController.php | 25 ++++++++--- src/Controller/BatteryModelController.php | 29 ++++++++----- src/Controller/BatterySizeController.php | 29 ++++++++----- src/Controller/CustomerController.php | 31 ++++++++----- src/Controller/RoleController.php | 31 ++++++++----- src/Controller/UserController.php | 37 ++++++++++------ src/Controller/VehicleController.php | 39 ++++++++++------- .../VehicleManufacturerController.php | 29 ++++++++----- 9 files changed, 188 insertions(+), 105 deletions(-) diff --git a/src/Controller/BatteryController.php b/src/Controller/BatteryController.php index a19b2e23..40e6182d 100644 --- a/src/Controller/BatteryController.php +++ b/src/Controller/BatteryController.php @@ -47,14 +47,21 @@ class BatteryController extends BaseController ->getRepository(Battery::class) ->createQueryBuilder('q'); - // count total records - $total = $qb->select('COUNT(q)') - ->getQuery() - ->getSingleScalarResult(); - // get datatable params $datatable = $req->request->get('datatable'); + // count total records + $tquery = $qb->select('COUNT(q)') + ->join('q.manufacturer', 'mfg') + ->join('q.model', 'model') + ->join('q.size', 'size'); + + // add filters to count query + $this->setQueryFilters($datatable, $tquery); + + $total = $tquery->getQuery() + ->getSingleScalarResult(); + // get current page number $page = $datatable['pagination']['page'] ?? 1; @@ -77,19 +84,8 @@ class BatteryController extends BaseController ->addSelect('model.name as model_name') ->addSelect('size.name as size_name'); - // add associations - $query->join('q.manufacturer', 'mfg') - ->join('q.model', 'model') - ->join('q.size', 'size'); - - // check if filter is present - if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) { - $query->where('mfg.name LIKE :filter') - ->orWhere('model.name LIKE :filter') - ->orWhere('size.name LIKE :filter') - ->orWhere('q.prod_code LIKE :filter') - ->setParameter('filter', '%' . $datatable['query']['data-rows-search'] . '%'); - } + // add filters to query + $this->setQueryFilters($datatable, $query); // check if sorting is present, otherwise use default if (isset($datatable['sort']['field']) && !empty($datatable['sort']['field'])) { @@ -398,4 +394,15 @@ class BatteryController extends BaseController $response->setStatusCode(Response::HTTP_OK); $response->send(); } + + // check if datatable filter is present and append to query + protected function setQueryFilters($datatable, &$query) { + if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) { + $query->where('mfg.name LIKE :filter') + ->orWhere('model.name LIKE :filter') + ->orWhere('size.name LIKE :filter') + ->orWhere('q.prod_code LIKE :filter') + ->setParameter('filter', '%' . $datatable['query']['data-rows-search'] . '%'); + } + } } diff --git a/src/Controller/BatteryManufacturerController.php b/src/Controller/BatteryManufacturerController.php index 18b67c09..44fa2cc2 100644 --- a/src/Controller/BatteryManufacturerController.php +++ b/src/Controller/BatteryManufacturerController.php @@ -42,14 +42,18 @@ class BatteryManufacturerController extends BaseController ->getRepository(BatteryManufacturer::class) ->createQueryBuilder('q'); - // count total records - $total = $qb->select('COUNT(q)') - ->getQuery() - ->getSingleScalarResult(); - // get datatable params $datatable = $req->request->get('datatable'); + // count total records + $tquery = $qb->select('COUNT(q)'); + + // add filters to count query + $this->setQueryFilters($datatable, $tquery); + + $total = $tquery->getQuery() + ->getSingleScalarResult(); + // get current page number $page = $datatable['pagination']['page'] ?? 1; @@ -69,6 +73,9 @@ class BatteryManufacturerController extends BaseController // build query $query = $qb->select('q'); + // add filters to query + $this->setQueryFilters($datatable, $query); + // check if filter is present if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) { $query->where('q.name LIKE :filter') @@ -256,4 +263,12 @@ class BatteryManufacturerController extends BaseController $response->setStatusCode(Response::HTTP_OK); $response->send(); } + + // check if datatable filter is present and append to query + protected function setQueryFilters($datatable, &$query) { + if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) { + $query->where('q.name LIKE :filter') + ->setParameter('filter', '%' . $datatable['query']['data-rows-search'] . '%'); + } + } } diff --git a/src/Controller/BatteryModelController.php b/src/Controller/BatteryModelController.php index 2d9772cc..f71c63e2 100644 --- a/src/Controller/BatteryModelController.php +++ b/src/Controller/BatteryModelController.php @@ -42,14 +42,18 @@ class BatteryModelController extends BaseController ->getRepository(BatteryModel::class) ->createQueryBuilder('q'); - // count total records - $total = $qb->select('COUNT(q)') - ->getQuery() - ->getSingleScalarResult(); - // get datatable params $datatable = $req->request->get('datatable'); + // count total records + $tquery = $qb->select('COUNT(q)'); + + // add filters to count query + $this->setQueryFilters($datatable, $tquery); + + $total = $tquery->getQuery() + ->getSingleScalarResult(); + // get current page number $page = $datatable['pagination']['page'] ?? 1; @@ -69,11 +73,8 @@ class BatteryModelController extends BaseController // build query $query = $qb->select('q'); - // check if filter is present - if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) { - $query->where('q.name LIKE :filter') - ->setParameter('filter', '%' . $datatable['query']['data-rows-search'] . '%'); - } + // add filters to query + $this->setQueryFilters($datatable, $query); // check if sorting is present, otherwise use default if (isset($datatable['sort']['field']) && !empty($datatable['sort']['field'])) { @@ -256,4 +257,12 @@ class BatteryModelController extends BaseController $response->setStatusCode(Response::HTTP_OK); $response->send(); } + + // check if datatable filter is present and append to query + protected function setQueryFilters($datatable, &$query) { + if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) { + $query->where('q.name LIKE :filter') + ->setParameter('filter', '%' . $datatable['query']['data-rows-search'] . '%'); + } + } } diff --git a/src/Controller/BatterySizeController.php b/src/Controller/BatterySizeController.php index ad886272..a5206278 100644 --- a/src/Controller/BatterySizeController.php +++ b/src/Controller/BatterySizeController.php @@ -42,14 +42,18 @@ class BatterySizeController extends BaseController ->getRepository(BatterySize::class) ->createQueryBuilder('q'); - // count total records - $total = $qb->select('COUNT(q)') - ->getQuery() - ->getSingleScalarResult(); - // get datatable params $datatable = $req->request->get('datatable'); + // count total records + $tquery = $qb->select('COUNT(q)'); + + // add filters to count query + $this->setQueryFilters($datatable, $tquery); + + $total = $tquery->getQuery() + ->getSingleScalarResult(); + // get current page number $page = $datatable['pagination']['page'] ?? 1; @@ -69,11 +73,8 @@ class BatterySizeController extends BaseController // build query $query = $qb->select('q'); - // check if filter is present - if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) { - $query->where('q.name LIKE :filter') - ->setParameter('filter', '%' . $datatable['query']['data-rows-search'] . '%'); - } + // add filters to query + $this->setQueryFilters($datatable, $query); // check if sorting is present, otherwise use default if (isset($datatable['sort']['field']) && !empty($datatable['sort']['field'])) { @@ -256,4 +257,12 @@ class BatterySizeController extends BaseController $response->setStatusCode(Response::HTTP_OK); $response->send(); } + + // check if datatable filter is present and append to query + protected function setQueryFilters($datatable, &$query) { + if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) { + $query->where('q.name LIKE :filter') + ->setParameter('filter', '%' . $datatable['query']['data-rows-search'] . '%'); + } + } } diff --git a/src/Controller/CustomerController.php b/src/Controller/CustomerController.php index e9a0d774..a7c9f595 100644 --- a/src/Controller/CustomerController.php +++ b/src/Controller/CustomerController.php @@ -45,14 +45,18 @@ class CustomerController extends BaseController ->getRepository(Customer::class) ->createQueryBuilder('q'); - // count total records - $total = $qb->select('COUNT(q)') - ->getQuery() - ->getSingleScalarResult(); - // get datatable params $datatable = $req->request->get('datatable'); + // count total records + $tquery = $qb->select('COUNT(q)'); + + // add filters to count query + $this->setQueryFilters($datatable, $tquery); + + $total = $tquery->getQuery() + ->getSingleScalarResult(); + // get current page number $page = $datatable['pagination']['page'] ?? 1; @@ -72,12 +76,8 @@ class CustomerController extends BaseController // build query $query = $qb->select('q'); - // check if filter is present - if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) { - $query->where('q.first_name LIKE :filter') - ->orWhere('q.last_name LIKE :filter') - ->setParameter('filter', '%' . $datatable['query']['data-rows-search'] . '%'); - } + // add filters to query + $this->setQueryFilters($datatable, $query); // check if sorting is present, otherwise use default if (isset($datatable['sort']['field']) && !empty($datatable['sort']['field'])) { @@ -266,4 +266,13 @@ class CustomerController extends BaseController $response->setStatusCode(Response::HTTP_OK); $response->send(); } + + // check if datatable filter is present and append to query + protected function setQueryFilters($datatable, &$query) { + if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) { + $query->where('q.first_name LIKE :filter') + ->orWhere('q.last_name LIKE :filter') + ->setParameter('filter', '%' . $datatable['query']['data-rows-search'] . '%'); + } + } } diff --git a/src/Controller/RoleController.php b/src/Controller/RoleController.php index 36a6ede2..d7147327 100644 --- a/src/Controller/RoleController.php +++ b/src/Controller/RoleController.php @@ -42,14 +42,18 @@ class RoleController extends BaseController ->getRepository(Role::class) ->createQueryBuilder('q'); - // count total records - $total = $qb->select('COUNT(q)') - ->getQuery() - ->getSingleScalarResult(); - // get datatable params $datatable = $req->request->get('datatable'); + // count total records + $tquery = $qb->select('COUNT(q)'); + + // add filters to count query + $this->setQueryFilters($datatable, $tquery); + + $total = $tquery->getQuery() + ->getSingleScalarResult(); + // get current page number $page = $datatable['pagination']['page'] ?? 1; @@ -69,12 +73,8 @@ class RoleController extends BaseController // build query $query = $qb->select('q'); - // check if filter is present - if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) { - $query->where('q.id LIKE :filter') - ->orWhere('q.name LIKE :filter') - ->setParameter('filter', '%' . $datatable['query']['data-rows-search'] . '%'); - } + // add filters to query + $this->setQueryFilters($datatable, $query); // check if sorting is present, otherwise use default if (isset($datatable['sort']['field']) && !empty($datatable['sort']['field'])) { @@ -305,4 +305,13 @@ class RoleController extends BaseController $response->setStatusCode(Response::HTTP_OK); $response->send(); } + + // check if datatable filter is present and append to query + protected function setQueryFilters($datatable, &$query) { + if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) { + $query->where('q.id LIKE :filter') + ->orWhere('q.name LIKE :filter') + ->setParameter('filter', '%' . $datatable['query']['data-rows-search'] . '%'); + } + } } diff --git a/src/Controller/UserController.php b/src/Controller/UserController.php index ba337f87..7353a6cf 100644 --- a/src/Controller/UserController.php +++ b/src/Controller/UserController.php @@ -32,14 +32,18 @@ class UserController extends BaseController ->getRepository(User::class) ->createQueryBuilder('q'); - // count total records - $total = $qb->select('COUNT(q)') - ->getQuery() - ->getSingleScalarResult(); - // get datatable params $datatable = $req->request->get('datatable'); + // count total records + $tquery = $qb->select('COUNT(q)'); + + // add filters to count query + $this->setQueryFilters($datatable, $tquery); + + $total = $tquery->getQuery() + ->getSingleScalarResult(); + // get current page number $page = $datatable['pagination']['page'] ?? 1; @@ -59,15 +63,8 @@ class UserController extends BaseController // build query $query = $qb->select('q'); - // check if filter is present - if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) { - $query->where('q.username LIKE :filter') - ->orWhere('q.first_name LIKE :filter') - ->orWhere('q.last_name LIKE :filter') - ->orWhere('q.email LIKE :filter') - ->orWhere('q.contact_num LIKE :filter') - ->setParameter('filter', '%' . $datatable['query']['data-rows-search'] . '%'); - } + // add filters to query + $this->setQueryFilters($datatable, $query); // check if sorting is present, otherwise use default if (isset($datatable['sort']['field']) && !empty($datatable['sort']['field'])) { @@ -351,4 +348,16 @@ class UserController extends BaseController $response->setStatusCode(Response::HTTP_OK); $response->send(); } + + // check if datatable filter is present and append to query + protected function setQueryFilters($datatable, &$query) { + if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) { + $query->where('q.username LIKE :filter') + ->orWhere('q.first_name LIKE :filter') + ->orWhere('q.last_name LIKE :filter') + ->orWhere('q.email LIKE :filter') + ->orWhere('q.contact_num LIKE :filter') + ->setParameter('filter', '%' . $datatable['query']['data-rows-search'] . '%'); + } + } } diff --git a/src/Controller/VehicleController.php b/src/Controller/VehicleController.php index 15395b41..cd6d33dc 100644 --- a/src/Controller/VehicleController.php +++ b/src/Controller/VehicleController.php @@ -32,14 +32,19 @@ class VehicleController extends BaseController ->getRepository(Vehicle::class) ->createQueryBuilder('q'); - // count total records - $total = $qb->select('COUNT(q)') - ->getQuery() - ->getSingleScalarResult(); - // get datatable params $datatable = $req->request->get('datatable'); + // count total records + $tquery = $qb->select('COUNT(q)') + ->join('q.manufacturer', 'mfg'); + + // add filters to count query + $this->setQueryFilters($datatable, $tquery); + + $total = $tquery->getQuery() + ->getSingleScalarResult(); + // get current page number $page = $datatable['pagination']['page'] ?? 1; @@ -60,17 +65,8 @@ class VehicleController extends BaseController $query = $qb->select('q') ->addSelect('mfg.name as mfg_name'); - // add associations - $query->join('q.manufacturer', 'mfg'); - - // check if filter is present - if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) { - $query->where('mfg.name LIKE :filter') - ->orWhere('q.make LIKE :filter') - ->orWhere('q.model_year_from LIKE :filter') - ->orWhere('q.model_year_to LIKE :filter') - ->setParameter('filter', '%' . $datatable['query']['data-rows-search'] . '%'); - } + // add filters to query + $this->setQueryFilters($datatable, $query); // check if sorting is present, otherwise use default if (isset($datatable['sort']['field']) && !empty($datatable['sort']['field'])) { @@ -299,4 +295,15 @@ class VehicleController extends BaseController $start_year = 1950; return range($start_year, date("Y")); } + + // check if datatable filter is present and append to query + protected function setQueryFilters($datatable, &$query) { + if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) { + $query->where('mfg.name LIKE :filter') + ->orWhere('q.make LIKE :filter') + ->orWhere('q.model_year_from LIKE :filter') + ->orWhere('q.model_year_to LIKE :filter') + ->setParameter('filter', '%' . $datatable['query']['data-rows-search'] . '%'); + } + } } diff --git a/src/Controller/VehicleManufacturerController.php b/src/Controller/VehicleManufacturerController.php index 15dd7a07..df446b02 100644 --- a/src/Controller/VehicleManufacturerController.php +++ b/src/Controller/VehicleManufacturerController.php @@ -42,14 +42,18 @@ class VehicleManufacturerController extends BaseController ->getRepository(VehicleManufacturer::class) ->createQueryBuilder('q'); - // count total records - $total = $qb->select('COUNT(q)') - ->getQuery() - ->getSingleScalarResult(); - // get datatable params $datatable = $req->request->get('datatable'); + // count total records + $tquery = $qb->select('COUNT(q)'); + + // add filters to count query + $this->setQueryFilters($datatable, $tquery); + + $total = $tquery->getQuery() + ->getSingleScalarResult(); + // get current page number $page = $datatable['pagination']['page'] ?? 1; @@ -69,11 +73,8 @@ class VehicleManufacturerController extends BaseController // build query $query = $qb->select('q'); - // check if filter is present - if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) { - $query->where('q.name LIKE :filter') - ->setParameter('filter', '%' . $datatable['query']['data-rows-search'] . '%'); - } + // add filters to query + $this->setQueryFilters($datatable, $query); // check if sorting is present, otherwise use default if (isset($datatable['sort']['field']) && !empty($datatable['sort']['field'])) { @@ -289,4 +290,12 @@ class VehicleManufacturerController extends BaseController 'data' => $vehicles ]); } + + // check if datatable filter is present and append to query + protected function setQueryFilters($datatable, &$query) { + if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) { + $query->where('q.name LIKE :filter') + ->setParameter('filter', '%' . $datatable['query']['data-rows-search'] . '%'); + } + } }