/** * @param array $data * @return Shop */ public function hydrate($data) { $shop = new Shop(); $shop->setId((int) $data['__shop_id']); $shop->setIsDefault((bool) $data['__shop_default']); $shop->setName($data['__shop_name']); $shop->setTitle($data['__shop_title']); $shop->setFallbackId((int) $data['__shop_fallback_id']); $shop->setCurrency($this->currencyHydrator->hydrate($data)); $shop->setCustomerGroup($this->customerGroupHydrator->hydrate($data)); $shop->setCategory($this->categoryHydrator->hydrate($data)); $shop->setLocale($this->localeHydrator->hydrate($data)); $parent = $data; if ($data['parent']) { $parent = $data['parent']; } $shop->setTemplate($this->templateHydrator->hydrate($parent)); $shop->setParentId((int) $parent['__shop_id']); $shop->setHost($parent['__shop_host']); $shop->setPath($parent['__shop_base_path']); $shop->setUrl($data['__shop_base_url'] ?: $parent['__shop_base_url']); $shop->setSecure((bool) $parent['__shop_secure']); $shop->setSecureHost($parent['__shop_secure_host']); $shop->setSecurePath($parent['__shop_secure_base_path']); $hosts = []; if ($parent['__shop_hosts']) { $hosts = explode('\\n', $parent['__shop_hosts']); $hosts = array_unique(array_values(array_filter($hosts))); } $shop->setHosts($hosts); return $shop; }
/** * @inheritdoc */ public function getList(array $ids, Struct\ShopContextInterface $context) { $query = $this->connection->createQueryBuilder(); $query->select($this->fieldHelper->getCategoryFields())->addSelect($this->fieldHelper->getMediaFields())->addSelect("GROUP_CONCAT(customerGroups.customergroupID) as __category_customer_groups"); $query->from('s_categories', 'category'); $query->leftJoin('category', 's_categories_attributes', 'categoryAttribute', 'categoryAttribute.categoryID = category.id')->leftJoin('category', 's_categories_avoid_customergroups', 'customerGroups', 'customerGroups.categoryID = category.id')->leftJoin('category', 's_media', 'media', 'media.id = category.mediaID')->leftJoin('media', 's_media_album_settings', 'mediaSettings', 'mediaSettings.albumID = media.albumID')->leftJoin('media', 's_media_attributes', 'mediaAttribute', 'mediaAttribute.mediaID = media.id'); $query->addOrderBy('category.position')->addOrderBy('category.id')->addGroupBy('category.id'); $query->where('category.id IN (:categories)')->andWhere('category.active = 1'); $query->setParameter(':categories', $ids, Connection::PARAM_INT_ARRAY); /**@var $statement \Doctrine\DBAL\Driver\ResultStatement */ $statement = $query->execute(); $data = $statement->fetchAll(\PDO::FETCH_ASSOC); $categories = []; foreach ($data as $row) { $id = $row['__category_id']; $categories[$id] = $this->categoryHydrator->hydrate($row); } return $categories; }