How to save multiselect values programmtically in magento 2?
-
14-04-2021 - |
Domanda
I am unable to save product multiselect values .I tried both ways Here is code
Way 1
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$_product = $objectManager->create('Magento\Catalog\Model\Product');
$_product->load(757);
$string = '5641,5642'; // option ids
$_product->setData('multi_select_color_code',$string);
$_product->save();
Way 2:
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$_product = $objectManager->create('Magento\Catalog\Model\Product');
$_product->load(757);
$array= array('5641','5642'); // option ids
$_product->setData('multi_select_color_code',$array);
$_product->save();
Soluzione 3
Finally I solved my problem by putting
$product->setStoreId(0)
Altri suggerimenti
Try this code
protected $productRepository;
public function __construct(
.........................................................
\Magento\Catalog\Model\ProductRepository $productRepository,
.........................................................
) {
.........................................................
$this->productRepository = $productRepository;
.........................................................
}
public function SetProductAttribute()
{
$productId = "757";
$attributeValue = '5641,5642';
$product = $this->productRepository->getById($productId);
$product->setCustomAttribute('multi_select_color_code', $attributeValue);
//$product->setData('multi_select_color_code', $attributeValue);
$this->productRepository->save($product);
}
I Hope This Helps You
I have the class below working at my end. In other words, way 2 is the way to go but this is assuming your custom attribute has the right setup. Also, you may notice below I am setting the area code to adminhtml
class SaveProductAttribute extends Command
{
/**
* @var ProductRepositoryInterface
*/
private $productRepository;
/**
* @var \Magento\Framework\App\State
*/
private $state;
public function __construct(
ProductRepositoryInterface $productRepository,
\Magento\Framework\App\State $state,
$name = null)
{
parent::__construct($name);
$this->productRepository = $productRepository;
$this->state = $state;
}
public function configure()
{
$this->setName('mbs:product_multiselect:save')
->setDescription('Save product multiselect value');
$this->addArgument('sku', InputArgument::REQUIRED);
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$this->initialiseAreaCode();
$product = $this->productRepository->get($input->getArgument('sku'));
$output->writeln(sprintf('sku: %s has activity: %s',
$input->getArgument('sku'),
$product->getData('activity'))
);
$product->setData('activity', [5432]);
$this->productRepository->save($product);
$output->writeln('attribute saved');
}
private function initialiseAreaCode(): void
{
try {
$this->state->setAreaCode(Area::AREA_ADMINHTML);
} catch (\Exception $e) {
}
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange