From 7656d632fb2db005ac62fd936df7f8227d89142a Mon Sep 17 00:00:00 2001 From: Mateusz Date: Fri, 3 Apr 2026 14:52:47 +0200 Subject: [PATCH 1/2] Remove eager customer JOIN from admin order grid query --- .../Resources/config/grids/order.yml | 2 +- .../Doctrine/ORM/OrderRepository.php | 35 +++++++++++++++++++ .../Repository/OrderRepositoryInterface.php | 7 ++++ 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/Sylius/Bundle/AdminBundle/Resources/config/grids/order.yml b/src/Sylius/Bundle/AdminBundle/Resources/config/grids/order.yml index 21746fcad1..486facd036 100644 --- a/src/Sylius/Bundle/AdminBundle/Resources/config/grids/order.yml +++ b/src/Sylius/Bundle/AdminBundle/Resources/config/grids/order.yml @@ -6,7 +6,7 @@ sylius_grid: options: class: "%sylius.model.order.class%" repository: - method: createCriteriaAwareSearchListQueryBuilder + method: createCriteriaAwareGridListQueryBuilder arguments: criteria: $criteria sorting: diff --git a/src/Sylius/Bundle/CoreBundle/Doctrine/ORM/OrderRepository.php b/src/Sylius/Bundle/CoreBundle/Doctrine/ORM/OrderRepository.php index 2e80af98e3..62b171f18b 100644 --- a/src/Sylius/Bundle/CoreBundle/Doctrine/ORM/OrderRepository.php +++ b/src/Sylius/Bundle/CoreBundle/Doctrine/ORM/OrderRepository.php @@ -57,6 +57,41 @@ class OrderRepository extends BaseOrderRepository implements OrderRepositoryInte ; } + public function createGridListQueryBuilder(): QueryBuilder + { + return $this->createQueryBuilder('o') + ->andWhere('o.state != :state') + ->setParameter('state', OrderInterface::STATE_CART) + ; + } + + public function createCriteriaAwareGridListQueryBuilder(?array $criteria): QueryBuilder + { + if ($criteria === null) { + return $this->createGridListQueryBuilder(); + } + + $hasProductCriteria = '' !== ($criteria['product'] ?? ''); + $hasVariantCriteria = '' !== ($criteria['variant'] ?? ''); + + $queryBuilder = $this->createGridListQueryBuilder(); + + if ($hasVariantCriteria || $hasProductCriteria) { + $queryBuilder + ->leftJoin('o.items', 'item') + ->leftJoin('item.variant', 'variant') + ; + } + + if ($hasProductCriteria) { + $queryBuilder + ->leftJoin('variant.product', 'product') + ; + } + + return $queryBuilder; + } + public function createCriteriaAwareSearchListQueryBuilder(?array $criteria): QueryBuilder { if ($criteria === null) { diff --git a/src/Sylius/Component/Core/Repository/OrderRepositoryInterface.php b/src/Sylius/Component/Core/Repository/OrderRepositoryInterface.php index 531fb4c134..c1e458bd57 100644 --- a/src/Sylius/Component/Core/Repository/OrderRepositoryInterface.php +++ b/src/Sylius/Component/Core/Repository/OrderRepositoryInterface.php @@ -35,6 +35,13 @@ interface OrderRepositoryInterface extends BaseOrderRepositoryInterface */ public function createCriteriaAwareSearchListQueryBuilder(?array $criteria): QueryBuilder; + public function createGridListQueryBuilder(): QueryBuilder; + + /** + * @param array|null $criteria + */ + public function createCriteriaAwareGridListQueryBuilder(?array $criteria): QueryBuilder; + /** * @param array|null $criteria */ From 529ad5d0a67575d3a938fd58e55306d04df9f896 Mon Sep 17 00:00:00 2001 From: Mateusz Date: Tue, 7 Apr 2026 13:48:26 +0200 Subject: [PATCH 2/2] Fix sorting issue --- src/Sylius/Bundle/CoreBundle/Doctrine/ORM/OrderRepository.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Sylius/Bundle/CoreBundle/Doctrine/ORM/OrderRepository.php b/src/Sylius/Bundle/CoreBundle/Doctrine/ORM/OrderRepository.php index 62b171f18b..460dee6353 100644 --- a/src/Sylius/Bundle/CoreBundle/Doctrine/ORM/OrderRepository.php +++ b/src/Sylius/Bundle/CoreBundle/Doctrine/ORM/OrderRepository.php @@ -60,6 +60,7 @@ class OrderRepository extends BaseOrderRepository implements OrderRepositoryInte public function createGridListQueryBuilder(): QueryBuilder { return $this->createQueryBuilder('o') + ->leftJoin('o.customer', 'customer') ->andWhere('o.state != :state') ->setParameter('state', OrderInterface::STATE_CART) ;