本文整理汇总了PHP中Magento\Catalog\Api\ProductRepositoryInterface::save方法的典型用法代码示例。如果您正苦于以下问题:PHP ProductRepositoryInterface::save方法的具体用法?PHP ProductRepositoryInterface::save怎么用?PHP ProductRepositoryInterface::save使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Magento\Catalog\Api\ProductRepositoryInterface
的用法示例。
在下文中一共展示了ProductRepositoryInterface::save方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: removeTierPrice
/**
* @param \Magento\Catalog\Model\Product $product
* @param int|string $customerGroupId
* @param int $qty
* @param int $websiteId
* @throws \Magento\Framework\Exception\NoSuchEntityException
* @throws \Magento\Framework\Exception\CouldNotSaveException
* @return void
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
*/
public function removeTierPrice(\Magento\Catalog\Model\Product $product, $customerGroupId, $qty, $websiteId)
{
$prices = $product->getData('tier_price');
// verify if price exist
if ($prices === null) {
throw new NoSuchEntityException(__('This product doesn\'t have tier price'));
}
$tierPricesQty = count($prices);
foreach ($prices as $key => $tierPrice) {
if ($customerGroupId == 'all' && $tierPrice['price_qty'] == $qty && $tierPrice['all_groups'] == 1 && intval($tierPrice['website_id']) === intval($websiteId)) {
unset($prices[$key]);
} elseif ($tierPrice['price_qty'] == $qty && $tierPrice['cust_group'] == $customerGroupId && intval($tierPrice['website_id']) === intval($websiteId)) {
unset($prices[$key]);
}
}
if ($tierPricesQty == count($prices)) {
throw new NoSuchEntityException(__('Product hasn\'t group price with such data: customerGroupId = \'%1\'' . ', website = %2, qty = %3', [$customerGroupId, $websiteId, $qty]));
}
$product->setData('tier_price', $prices);
try {
$this->productRepository->save($product);
} catch (\Exception $exception) {
throw new CouldNotSaveException(__('Invalid data provided for tier_price'));
}
}
示例2: testSaveFailure
/**
* @magentoDataFixture Magento/Bundle/_files/product.php
* @magentoDbIsolation enabled
*/
public function testSaveFailure()
{
$this->markTestSkipped("When MAGETWO-36510 is fixed, need to change Dbisolation to disabled");
$bundleProductSku = 'bundle-product';
$product = $this->productRepository->get($bundleProductSku);
$bundleExtensionAttributes = $product->getExtensionAttributes()->getBundleProductOptions();
$bundleOption = $bundleExtensionAttributes[0];
$this->assertEquals(true, $bundleOption->getRequired());
$bundleOption->setRequired(false);
//set an incorrect option id to trigger exception
$bundleOption->setOptionId(-1);
$description = "hello";
$product->setDescription($description);
$product->getExtensionAttributes()->setBundleProductOptions([$bundleOption]);
$caughtException = false;
try {
$this->productRepository->save($product);
} catch (\Magento\Framework\Exception\NoSuchEntityException $e) {
$caughtException = true;
}
$this->assertTrue($caughtException);
/** @var \Magento\Catalog\Model\Product $product */
$product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\\Catalog\\Model\\Product')->load($product->getId());
$this->assertEquals(null, $product->getDescription());
}
示例3: setProductLinks
/**
* {@inheritdoc}
*/
public function setProductLinks($sku, $type, array $items)
{
$linkTypes = $this->linkTypeProvider->getLinkTypes();
if (!isset($linkTypes[$type])) {
throw new NoSuchEntityException(__('Provided link type "%1" does not exist', $type));
}
$product = $this->productRepository->get($sku);
// Replace only links of the specified type
$existingLinks = $product->getProductLinks();
$newLinks = [];
if (!empty($existingLinks)) {
foreach ($existingLinks as $link) {
if ($link->getLinkType() != $type) {
$newLinks[] = $link;
}
}
$newLinks = array_merge($newLinks, $items);
} else {
$newLinks = $items;
}
$product->setProductLinks($newLinks);
try {
$this->productRepository->save($product);
} catch (\Exception $exception) {
throw new CouldNotSaveException(__('Invalid data provided for linked products'));
}
return true;
}
示例4: createConfigurableChildren
/**
* Generates child products for configurable product
*
* @param \Magento\Catalog\Api\Data\ProductAttributeInterface $configurableAttribute
* @return array
* @throws \Exception
*/
protected function createConfigurableChildren($configurableAttribute)
{
$availableOptions = $configurableAttribute->getOptions();
/* Not sure why the zero index has no value for all attributes. Maybe will be fixed
in next Magento versions */
unset($availableOptions[0]);
if (!count($availableOptions) > 0) {
throw new \Exception('The selected configurable attribute has no values');
}
// Create child simple products
$availableProductsCount = $this->getCount() - $this->processedProducts - 1;
if ($availableProductsCount >= self::CONFIGURABLE_CHILD_LIMIT) {
$childrenLimit = self::CONFIGURABLE_CHILD_LIMIT;
} else {
$childrenLimit = $availableProductsCount;
}
if ($childrenLimit > count($availableOptions)) {
$childrenLimit = count($availableOptions);
}
$childrenCount = rand(1, $childrenLimit);
$childProductsIds = $configurableOptionsValues = [];
for ($optCount = 0; $optCount < $childrenCount; $optCount++) {
$product = $this->createSimpleProduct(true, true);
$currentOptionId = array_rand($availableOptions);
$optValueId = $availableOptions[$currentOptionId]->getValue();
unset($availableOptions[$currentOptionId]);
$product->setCustomAttribute($configurableAttribute->getAttributeCode(), $optValueId);
$optionValue = $this->optionValue;
$optionValue->setValueIndex($optValueId);
$configurableOptionsValues[] = $optionValue;
$product = $this->productRepository->save($product);
$childProductsIds[] = $product->getId();
}
return ['child_products_ids' => $childProductsIds, 'configurable_options_values' => $configurableOptionsValues];
}
示例5: enableProductWithSku
/**
* @param string $sku
*/
public function enableProductWithSku($sku)
{
$this->validateSku($sku);
$product = $this->productRepository->get($sku);
if ($product->getStatus() == ProductStatus::STATUS_ENABLED) {
throw new \RuntimeException(sprintf('The product with the SKU "%s" already is enabled', $sku));
}
$product->setStatus(ProductStatus::STATUS_ENABLED);
$this->productRepository->save($product);
}
示例6: testSaveProductRelationsNoChildren
/**
* @magentoDataFixture Magento/ConfigurableProduct/_files/product_configurable.php
* @magentoAppIsolation enabled
*/
public function testSaveProductRelationsNoChildren()
{
$childrenIds = $this->product->getTypeInstance()->getChildrenIds($this->product->getId());
self::assertNotEmpty(reset($childrenIds));
$product = $this->productRepository->getById($this->product->getId(), true);
$extensionAttributes = $product->getExtensionAttributes();
$extensionAttributes->setConfigurableProductLinks([]);
$product->setExtensionAttributes($extensionAttributes);
$this->productRepository->save($product);
self::assertEquals([[]], $this->model->getChildrenIds($this->product->getId()));
}
示例7: update
/**
* Create simple product.
*
* @param int $mageId
* @param string $name
* @param bool $isActive
* @param double $priceWholesale
* @param double $weight
*/
public function update($mageId, $name, $isActive, $priceWholesale, $weight)
{
$this->_logger->debug("Update product (id: {$mageId}; name: {$name}; active: {$isActive}; price: {$priceWholesale}; weight: {$weight}.)");
/** @var \Magento\Catalog\Api\Data\ProductInterface $product */
$product = $this->_mageRepoProd->getById($mageId);
// SKU should not be changed
$product->setName($name);
$status = $this->_getStatus($isActive);
$product->setStatus($status);
$product->setPrice($priceWholesale);
$product->setWeight($weight);
$this->_mageRepoProd->save($product);
}
示例8: remove
/**
* {@inheritdoc}
*/
public function remove($sku, $entryId)
{
$product = $this->productRepository->get($sku);
/** @var $productMediaGallery \Magento\Catalog\Model\Product\Attribute\Backend\Media */
$productMediaGallery = $this->getGalleryAttributeBackend($product);
$filePath = $this->entryResolver->getEntryFilePathById($product, $entryId);
if ($filePath === null) {
throw new NoSuchEntityException(__('There is no image with provided ID.'));
}
$productMediaGallery->removeImage($product, $filePath);
$this->productRepository->save($product);
return true;
}
示例9: enableProductWithSku
/**
* @param string $sku
*/
public function enableProductWithSku($sku)
{
$this->validateSku($sku);
try {
$product = $this->productRepository->get($sku);
if ($product->getStatus() == ProductStatus::STATUS_ENABLED) {
throw new ProductAlreadyEnabledException(sprintf('The product "%s" already is enabled', $sku));
}
$product->setStatus(ProductStatus::STATUS_ENABLED);
$this->productRepository->save($product);
} catch (NoSuchEntityException $exception) {
throw new ProductStatusAdapterException($exception->getMessage());
}
}
示例10: deleteByIdentifier
/**
* {@inheritdoc}
*/
public function deleteByIdentifier($sku, $optionId)
{
$product = $this->productRepository->get($sku, true);
$options = $product->getOptions();
$option = $product->getOptionById($optionId);
if ($option === null) {
throw NoSuchEntityException::singleField('optionId', $optionId);
}
unset($options[$optionId]);
try {
$this->delete($option);
if (empty($options)) {
$this->productRepository->save($product);
}
} catch (\Exception $e) {
throw new CouldNotSaveException(__('Could not remove custom option'));
}
return true;
}
示例11: add
/**
* {@inheritdoc}
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
* @SuppressWarnings(PHPMD.NPathComplexity)
*/
public function add($sku, $customerGroupId, $price, $qty)
{
if (!\Zend_Validate::is($price, 'Float') || $price <= 0 || !\Zend_Validate::is($qty, 'Float') || $qty <= 0) {
throw new InputException(__('Please provide valid data'));
}
$product = $this->productRepository->get($sku, ['edit_mode' => true]);
$tierPrices = $product->getData('tier_price');
$websiteIdentifier = 0;
$value = $this->config->getValue('catalog/price/scope', \Magento\Store\Model\ScopeInterface::SCOPE_WEBSITE);
if ($value != 0) {
$websiteIdentifier = $this->storeManager->getWebsite()->getId();
}
$found = false;
foreach ($tierPrices as &$item) {
if ('all' == $customerGroupId) {
$isGroupValid = $item['all_groups'] == 1;
} else {
$isGroupValid = $item['cust_group'] == $customerGroupId;
}
if ($isGroupValid && $item['website_id'] == $websiteIdentifier && $item['price_qty'] == $qty) {
$item['price'] = $price;
$found = true;
break;
}
}
if (!$found) {
$mappedCustomerGroupId = 'all' == $customerGroupId ? $this->groupManagement->getAllCustomersGroup()->getId() : $this->groupRepository->getById($customerGroupId)->getId();
$tierPrices[] = ['cust_group' => $mappedCustomerGroupId, 'price' => $price, 'website_price' => $price, 'website_id' => $websiteIdentifier, 'price_qty' => $qty];
}
$product->setData('tier_price', $tierPrices);
$errors = $product->validate();
if (is_array($errors) && count($errors)) {
$errorAttributeCodes = implode(', ', array_keys($errors));
throw new InputException(__('Values of following attributes are invalid: %1', $errorAttributeCodes));
}
try {
$this->productRepository->save($product);
} catch (\Exception $e) {
throw new CouldNotSaveException(__('Could not save group price'));
}
return true;
}
示例12: remove
/**
* {@inheritdoc}
*/
public function remove($sku, $entryId)
{
$product = $this->productRepository->get($sku);
$existingMediaGalleryEntries = $product->getMediaGalleryEntries();
if ($existingMediaGalleryEntries == null) {
throw new NoSuchEntityException(__('There is no image with provided ID.'));
}
$found = false;
foreach ($existingMediaGalleryEntries as $key => $entry) {
if ($entry->getId() == $entryId) {
unset($existingMediaGalleryEntries[$key]);
$found = true;
break;
}
}
if (!$found) {
throw new NoSuchEntityException(__('There is no image with provided ID.'));
}
$product->setMediaGalleryEntries($existingMediaGalleryEntries);
$this->productRepository->save($product);
return true;
}
示例13: add
/**
* {@inheritdoc}
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
* @SuppressWarnings(PHPMD.NPathComplexity)
*/
public function add($sku, $customerGroupId, $price)
{
if (!\Zend_Validate::is($price, 'Float') || $price <= 0 || !\Zend_Validate::is($price, 'Float')) {
throw new InputException(__('Please provide valid data'));
}
$customerGroup = $this->groupRepository->getById($customerGroupId);
$product = $this->productRepository->get($sku, true);
$groupPrices = $product->getData('group_price');
$websiteIdentifier = 0;
$value = $this->config->getValue('catalog/price/scope', \Magento\Store\Model\ScopeInterface::SCOPE_WEBSITE);
if ($value != 0) {
$websiteIdentifier = $this->storeManager->getWebsite()->getId();
}
$found = false;
foreach ($groupPrices as &$currentPrice) {
if (intval($currentPrice['cust_group']) === $customerGroupId && intval($currentPrice['website_id']) === intval($websiteIdentifier)) {
$currentPrice['price'] = $price;
$found = true;
break;
}
}
if (!$found) {
$groupPrices[] = ['cust_group' => $customerGroup->getId(), 'website_id' => $websiteIdentifier, 'price' => $price];
}
$product->setData('group_price', $groupPrices);
$errors = $product->validate();
if (is_array($errors) && count($errors)) {
$errorAttributeCodes = implode(', ', array_keys($errors));
throw new InputException(__('Values of following attributes are invalid: %1', $errorAttributeCodes));
}
try {
$this->productRepository->save($product);
} catch (\Exception $e) {
throw new CouldNotSaveException(__('Could not save group price'));
}
return true;
}