/** * @inheritdoc */ public function getList($products, Struct\ShopContextInterface $context) { $ids = []; foreach ($products as $product) { $ids[] = $product->getId(); } $ids = array_unique($ids); $query = $this->connection->createQueryBuilder(); $query->addSelect($this->fieldHelper->getVoteFields()); $query->from('s_articles_vote', 'vote')->where('vote.articleID IN (:ids)')->andWhere('vote.active = 1')->orderBy('vote.articleID', 'DESC')->addOrderBy('vote.datum', 'DESC')->setParameter(':ids', $ids, Connection::PARAM_INT_ARRAY); /**@var $statement \Doctrine\DBAL\Driver\ResultStatement */ $statement = $query->execute(); $data = $statement->fetchAll(\PDO::FETCH_ASSOC); $votes = []; foreach ($data as $row) { $id = $row['__vote_articleID']; $votes[$id][] = $this->voteHydrator->hydrate($row); } $result = []; foreach ($products as $product) { $id = $product->getId(); if (!isset($votes[$id])) { continue; } $number = $product->getNumber(); $result[$number] = $votes[$id]; } return $result; }
/** * @inheritdoc */ public function getList($products, Struct\ShopContextInterface $context) { $ids = []; foreach ($products as $product) { $ids[] = $product->getId(); } $ids = array_unique($ids); $query = $this->connection->createQueryBuilder(); $query->select(['articleID', 'COUNT(id) as total', 'points']); $query->from('s_articles_vote', 'vote')->where('vote.articleID IN (:products)')->andWhere('vote.active = 1')->groupBy('vote.articleID')->addGroupBy('vote.points')->orderBy('vote.articleID', 'ASC')->setParameter(':products', $ids, Connection::PARAM_INT_ARRAY); /**@var $statement \Doctrine\DBAL\Driver\ResultStatement */ $statement = $query->execute(); $data = $statement->fetchAll(\PDO::FETCH_GROUP); $result = []; foreach ($products as $product) { if (!isset($data[$product->getId()])) { continue; } $key = $product->getNumber(); $votes = $data[$product->getId()]; $result[$key] = $this->voteHydrator->hydrateAverage($votes); } return $result; }