/** * @param Struct\Customer\Group $customerGroup * @param Struct\ShopContextInterface $context * @return array|Struct\Product\PriceGroup[] */ public function getPriceGroups(Struct\Customer\Group $customerGroup, Struct\ShopContextInterface $context) { $query = $this->connection->createQueryBuilder(); $query->addSelect('priceGroupDiscount.groupID')->addSelect($this->fieldHelper->getPriceGroupDiscountFields())->addSelect($this->fieldHelper->getPriceGroupFields()); $query->from('s_core_pricegroups_discounts', 'priceGroupDiscount')->innerJoin('priceGroupDiscount', 's_core_pricegroups', 'priceGroup', 'priceGroup.id = priceGroupDiscount.groupID'); $query->andWhere('priceGroupDiscount.customergroupID = :customerGroup'); $query->groupBy('priceGroupDiscount.id'); $query->orderBy('priceGroupDiscount.groupID')->addOrderBy('priceGroupDiscount.discountstart'); $query->setParameter(':customerGroup', $customerGroup->getId()); /**@var $statement \Doctrine\DBAL\Driver\ResultStatement */ $statement = $query->execute(); $data = $statement->fetchAll(\PDO::FETCH_GROUP); $priceGroups = []; foreach ($data as $row) { $priceGroup = $this->priceHydrator->hydratePriceGroup($row); foreach ($priceGroup->getDiscounts() as $discount) { $discount->setCustomerGroup($customerGroup); } $priceGroups[$priceGroup->getId()] = $priceGroup; } return $priceGroups; }