Вопрос

In being careful, I want to check if my custom attribute exists before I attempt to utilize it in any way. I need to check against all attributes collection, not just the product collection. My attribute may exist on a customer, a product, or on a custom model of my own creation.

In magento 1.x, I'd use the following:

$attr = Mage::getResourceModel('eav/entity_attribute_collection')->setCodeFilter('specialty')->getFirstItem();

if ($attr->getAttributeId() > 0) {
 Do some stuff....'

I can't find anything that explicitly does something like this

Это было полезно?

Решение

You need use \Magento\Eav\Api\AttributeRepositoryInterface::get method for this.

For example:

try {

   $attribute = $this->attributeRepository->get($entityType, $attributeCode);

} catch (\Magento\Framework\Exception\NoSuchEntityException $e) {

    //  attribute does not exist

}

Другие советы

You may also use Magento\Catalog\Api\ProductAttributeRepositoryInterface to determine the product attribute

    try {
            $this->attributeRepository->get('custom_attribute');
        } catch (NoSuchEntityException $e) {

            //To-do create attribute
        }

This is verified on 2.3.2

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top