1

I am creating new products via code. I want to save a product that has a custom attribute with multiple values. So the attribute property input type is a Multiple Select (nomo_color). I know how to save a single attribute property via the method

$product->setCustomAttribute('attribute_code', id)

But how would I do this if I should save multiple values ?

I tried iterating over the values and calling the method multiple times. This doesn't work and only saves the last value.

This is my Code

$product = $this->productFactory->create();
$type = $result[2];
$article = $result[1];
$size = $result[3];
$color = $result[4];

$qualities = isset($result[7]) ? $this->formatQualityText($result[7]) : [];
$colorValues = isset($result[5]) ? $this->formatColorText($result[5]) : [];

$sku = $article.'-'.$color.'-'.$size;
$name = $article . ' - ' . $color . ' - ' . $type . ' - ' . $size;
$price = (float) isset($result[6]) ? $result[6] : 0;

$product->setSku($sku);
$product->setName($name);
$product->setPrice($price);

if ( ! empty($colorValues)) {
    foreach($colorValues as $value) {
        $product->setCustomAttribute('nomo_color', $this->attributeHelper->createOrGetId('nomo_color', $value));
    }
}

if ( ! empty($color)) {
    $product->setCustomAttribute('color', $this->attributeHelper->createOrGetId('color', $color));
}

$this->productRepository->save($product);
1

This is how I solved my problem.

You can save custom attribute id's seperated by ',' => implode(',' $ids);

if ( ! empty($colorValues)) {
    $colorIds = [];
    foreach($colorValues as $colorValue) {
        $colorIds[] = $this->attributeHelper->createOrGetId('nomo_color', $colorValue);
    }
    $product->setCustomAttribute('nomo_color', implode(',',$colorIds));
}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.