I am trying to retrieve the list of dropdown attributes and check if the value exists (if it does i need to get the value and assign it to the product) and if it doesnt i will have to create it and get its value to assign it to the product.
$attribute = $this->objectManager->create('Magento\Eav\Model\Entity\Attribute');
$attributeId = $attribute->getIdByCode('catalog_product','manufacturer');
$model = $this->objectManager->create('Magento\Catalog\Model\ResourceModel\Eav\Attribute');
$model->load($attributeId);
print_r($model->getFrontendLabel());
Following Magento 2 guidelines, you should not use ObjectManager by yourself. Instead, you must use dependency injection. More info here
In your Block/Controller/Helper..., create a constructor and inject \Magento\Catalog\Api\ProductAttributeRepositoryInterface
class. For example :
private \Magento\Catalog\Api\ProductAttributeRepositoryInterface $productAttributeRepository;
public function __construct(
\Magento\Catalog\Api\ProductAttributeRepositoryInterface $productAttributeRepository
) {
$this->productAttributeRepository = $productAttributeRepository;
}
Then, in your dedicated method, you want to call (PHPDoc added for clarity) :
/** @var \Magento\Eav\Api\Data\AttributeOptionInterface[] $manufacturerOptions */
$manufacturerOptions = $this->productAttributeRepository->get('manufacturer')->getOptions();
You can now get options values and labels this way :
foreach ($manufacturerOptions as $manufacturerOption) {
$manufacturerOption->getValue(); // Value
$manufacturerOption->getLabel(); // Label
}
<?php echo $_product->getResource()->getAttribute('movement')->getFrontend()->getValue($_product);?>
$_product is the object of Product The above code returns attribute value of attribute name "movement".
Using API Service layer, for EAV Attribute of any entity type, Inject the service data member in your constructor as follow.
protected $eavAttributeRepository;
public function __construct(
...
\Magento\Eav\Api\AttributeRepositoryInterface $eavAttributeRepositoryInterface,
...
){
...
$this->eavAttributeRepository = $eavAttributeRepositoryInterface;
...
}
And the you can get the attribute using this.
$attribute = $this->eavAttributeRepository->get('catalog_product', 'attribute_code_here');
// vardump($attribute->getData());
In order to get attribute option values array, use this.
$options = $attribute->getSource()->getAllOptions();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With