From 1631cacf98688376ebbd30c0e0588f94ac5644ce Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Sun, 20 Jun 2021 01:33:02 +0800 Subject: [PATCH] Optimize query for related tickets - split into 3 separate queries #590 --- src/Controller/TicketController.php | 24 ++++++++++++++++++++++++ src/Entity/Ticket.php | 5 +++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/Controller/TicketController.php b/src/Controller/TicketController.php index b870576e..303b34a6 100644 --- a/src/Controller/TicketController.php +++ b/src/Controller/TicketController.php @@ -337,6 +337,28 @@ class TicketController extends Controller $params['redirect_url'] = $cust_update_url; } + // optimized get related tickets + $rel_tix = []; + // one query for each so we use indeces + if (!empty($obj->getFirstName()) && !empty($obj->getLastName())) + $rel_tix[] = $em->getRepository(Ticket::class)->findBy(['first_name' => $obj->getFirstName(), 'last_name' => $obj->getLastName()]); + if (!empty($obj->getContactNumber())) + $rel_tix[] = $em->getRepository(Ticket::class)->findBy(['contact_num' => $obj->getContactNumber()]); + if (!empty($obj->getPlateNumber())) + $rel_tix[] = $em->getRepository(Ticket::class)->findBy(['plate_number' => $obj->getPlateNumber()]); + + $consolidated_rel_tix = []; + foreach ($rel_tix as $rel_tickets) + { + foreach ($rel_tickets as $rticket) + { + $rtid = $rticket->getID(); + $consolidated_rel_tix[$rtid] = $rticket; + } + } + $params['related_tickets'] = $consolidated_rel_tix; + + /* // get related tickets $qb = $em->getRepository(Ticket::class) ->createQueryBuilder('q'); @@ -353,6 +375,8 @@ class TicketController extends Controller $params['related_tickets'] = $query->getQuery() ->getResult(); + */ + $params['obj'] = $obj; diff --git a/src/Entity/Ticket.php b/src/Entity/Ticket.php index 311f8f39..35882075 100644 --- a/src/Entity/Ticket.php +++ b/src/Entity/Ticket.php @@ -13,9 +13,10 @@ use DateTime; /** * @ORM\Entity * @ORM\Table(name="ticket", indexes={ + * @ORM\Index(columns={"contact_num"}), * @ORM\Index(columns={"plate_number"}), - * @ORM\Index(columns={"first_name"}, flags={"fulltext"}), - * @ORM\Index(columns={"last_name"}, flags={"fulltext"}) + * @ORM\Index(columns={"first_name"}), + * @ORM\Index(columns={"last_name"}) * }) */ class Ticket