/**
  * @inheritdoc
  */
 public function getProductCombinations(Struct\BaseProduct $product)
 {
     $query = $this->connection->createQueryBuilder();
     $query->select(['relations.option_id', "GROUP_CONCAT(DISTINCT assignedRelations.option_id, '' SEPARATOR '|') as combinations"]);
     $query->from('s_article_configurator_option_relations', 'relations');
     $query->innerJoin('relations', 's_articles_details', 'variant', 'variant.id = relations.article_id
          AND variant.articleID = :articleId
          AND variant.active = 1');
     $query->innerJoin('variant', 's_articles', 'product', 'product.id = variant.articleID AND
         (product.laststock * variant.instock) >= (product.laststock * variant.minpurchase)');
     $query->leftJoin('relations', 's_article_configurator_option_relations', 'assignedRelations', 'assignedRelations.article_id = relations.article_id
          AND assignedRelations.option_id != relations.option_id');
     $query->groupBy('relations.option_id');
     $query->setParameter(':articleId', $product->getId());
     /**@var $statement \Doctrine\DBAL\Driver\ResultStatement */
     $statement = $query->execute();
     $data = $statement->fetchAll(\PDO::FETCH_KEY_PAIR);
     foreach ($data as &$row) {
         $row = explode('|', $row);
     }
     return $data;
 }
 /**
  * @param Struct\BaseProduct $product
  * @return int[]
  */
 private function getProductCategories(Struct\BaseProduct $product)
 {
     $query = $this->connection->createQueryBuilder();
     return $query->select('categoryID')->from('s_articles_categories', 'category')->where('articleID = :productId')->setParameter(':productId', $product->getId())->execute()->fetchAll(\PDO::FETCH_COLUMN);
 }