Пример #1
0
 /**
  * @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;
 }
Пример #3
0
 /**
  * @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();
 }
Пример #5
0
 /**
  * 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);
     }
 }