Fix errors for item query. #780

This commit is contained in:
Korina Cordero 2023-12-31 00:46:12 -05:00
parent 80b9f90324
commit c17be92f0a

View file

@ -5,6 +5,7 @@ namespace App\Controller;
use Doctrine\ORM\Query; use Doctrine\ORM\Query;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\Query\Expr\Join;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Validator\Validator\ValidatorInterface; use Symfony\Component\Validator\Validator\ValidatorInterface;
@ -37,7 +38,7 @@ class ItemController extends Controller
public function datatableRows(Request $req) public function datatableRows(Request $req)
{ {
// get query builder // get query builder
$qb = $this->getDoctrine() $total_qb = $this->getDoctrine()
->getRepository(Item::class) ->getRepository(Item::class)
->createQueryBuilder('q'); ->createQueryBuilder('q');
@ -45,9 +46,9 @@ class ItemController extends Controller
$datatable = $req->request->get('datatable'); $datatable = $req->request->get('datatable');
// count total records // count total records
$tquery = $qb->select('COUNT(q)') $tquery = $total_qb->select('COUNT(q)')
->innerJoin('q.battery', 'b', 'WITH', 'b.id = q.item_id') ->leftJoin(Battery::class, 'battery', Join::WITH, 'battery.id = q.item_id')
->innerJoin('q.service_offering', 'so', 'WITH', 'so.id = q.item_id'); ->leftJoin(ServiceOffering::class, 'so', Join::WITH, 'so.id = q.item_id');
$this->setQueryFilters($datatable, $tquery); $this->setQueryFilters($datatable, $tquery);
$total = $tquery->getQuery() $total = $tquery->getQuery()
->getSingleScalarResult(); ->getSingleScalarResult();
@ -68,10 +69,15 @@ class ItemController extends Controller
'field' => 'id' 'field' => 'id'
]; ];
// reset query builder
$qb = $this->getDoctrine()
->getRepository(Item::class)
->createQueryBuilder('q');
// build query // build query
$query = $qb->select('q') $query = $qb->select('q')
->innerJoin('q.battery', 'b', 'WITH', 'b.id = q.item_id') ->leftJoin(Battery::class, 'battery', Join::WITH, 'battery.id = q.item_id')
->innerJoin('q.service_offering', 'so', 'WITH', 'so.id = q.item_id'); ->leftJoin(ServiceOffering::class, 'so', Join::WITH, 'so.id = q.item_id');
$this->setQueryFilters($datatable, $query); $this->setQueryFilters($datatable, $query);
// check if sorting is present, otherwise use default // check if sorting is present, otherwise use default