/** * @param array $filters * @param ChannelInterface $channel * * @return CursorInterface */ protected function getProductsCursor(array $filters, ChannelInterface $channel = null) { $options = ['filters' => $filters]; if (null !== $channel) { $options['default_scope'] = $channel->getCode(); } $productQueryBuilder = $this->pqbFactory->create($options); return $productQueryBuilder->execute(); }
/** * {@inheritdoc} */ public function valueExists(ProductValueInterface $value) { $productQueryBuilder = $this->queryBuilderFactory->create(); $qb = $productQueryBuilder->getQueryBuilder(); $productQueryBuilder->addFilter($value->getAttribute()->getCode(), '=', $value->getData()); $result = $qb->hydrate(false)->getQuery()->getSingleResult(); if (null === $result || null !== $result && $value->getEntity()->getId() === (string) $result['_id']) { return false; } return true; }
/** * @param GroupInterface $group * @param array $labels */ protected function setProducts(GroupInterface $group, array $productIds) { foreach ($group->getProducts() as $product) { $group->removeProduct($product); } if (empty($productIds)) { return; } $pqb = $this->productQueryBuilderFactory->create(); $pqb->addFilter('id', 'IN', $productIds); $products = $pqb->execute(); foreach ($products as $product) { $group->addProduct($product); } }
/** * {@inheritdoc} */ public function findOneByWithValues($id) { $productQb = $this->queryBuilderFactory->create(); $qb = $productQb->getQueryBuilder(); $rootAlias = current($qb->getRootAliases()); $this->addJoinToValueTables($qb); $qb->leftJoin('Attribute.availableLocales', 'AttributeLocales'); $qb->addSelect('Value'); $qb->addSelect('Attribute'); $qb->addSelect('AttributeLocales'); $qb->leftJoin('Attribute.group', 'AttributeGroup'); $qb->addSelect('AttributeGroup'); $qb->andWhere($qb->expr()->eq($rootAlias . '.id', $id)); return $qb->getQuery()->getOneOrNullResult(); }
/** * Save associated products updated by the variant group update * * @param GroupInterface $group */ protected function saveAssociatedProducts(GroupInterface $group) { $productInGroup = $group->getProducts(); $productsToUpdate = $productInGroup->toArray(); $productToUpdateIds = array_map(function ($product) { return $product->getId(); }, $productsToUpdate); if (null !== $group->getId()) { $pqb = $this->productQueryBuilderFactory->create(); $pqb->addFilter('groups.id', Operators::IN_LIST, [$group->getId()]); $oldProducts = $pqb->execute(); foreach ($oldProducts as $oldProduct) { if (!in_array($oldProduct->getId(), $productToUpdateIds)) { $oldProduct->removeGroup($group); $productsToUpdate[] = $oldProduct; $productToUpdateIds[] = $oldProduct->getId(); } } } if (!empty($productsToUpdate)) { $this->productSaver->saveAll($productsToUpdate); } }