From c17be92f0a9d24c7e5541345a9f7e6f659d26996 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Sun, 31 Dec 2023 00:46:12 -0500 Subject: [PATCH] Fix errors for item query. #780 --- src/Controller/ItemController.php | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/Controller/ItemController.php b/src/Controller/ItemController.php index 07e66df1..88cc769c 100644 --- a/src/Controller/ItemController.php +++ b/src/Controller/ItemController.php @@ -5,6 +5,7 @@ namespace App\Controller; use Doctrine\ORM\Query; use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\Query\Expr\Join; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Validator\Validator\ValidatorInterface; @@ -37,7 +38,7 @@ class ItemController extends Controller public function datatableRows(Request $req) { // get query builder - $qb = $this->getDoctrine() + $total_qb = $this->getDoctrine() ->getRepository(Item::class) ->createQueryBuilder('q'); @@ -45,9 +46,9 @@ class ItemController extends Controller $datatable = $req->request->get('datatable'); // count total records - $tquery = $qb->select('COUNT(q)') - ->innerJoin('q.battery', 'b', 'WITH', 'b.id = q.item_id') - ->innerJoin('q.service_offering', 'so', 'WITH', 'so.id = q.item_id'); + $tquery = $total_qb->select('COUNT(q)') + ->leftJoin(Battery::class, 'battery', Join::WITH, 'battery.id = q.item_id') + ->leftJoin(ServiceOffering::class, 'so', Join::WITH, 'so.id = q.item_id'); $this->setQueryFilters($datatable, $tquery); $total = $tquery->getQuery() ->getSingleScalarResult(); @@ -68,10 +69,15 @@ class ItemController extends Controller 'field' => 'id' ]; + // reset query builder + $qb = $this->getDoctrine() + ->getRepository(Item::class) + ->createQueryBuilder('q'); + // build query $query = $qb->select('q') - ->innerJoin('q.battery', 'b', 'WITH', 'b.id = q.item_id') - ->innerJoin('q.service_offering', 'so', 'WITH', 'so.id = q.item_id'); + ->leftJoin(Battery::class, 'battery', Join::WITH, 'battery.id = q.item_id') + ->leftJoin(ServiceOffering::class, 'so', Join::WITH, 'so.id = q.item_id'); $this->setQueryFilters($datatable, $query); // check if sorting is present, otherwise use default