Cursos Magento

Como verificar se um atributo existe no Magento 2

,

Atualizado em 01 de março de 2022

Em algum momento você precisará verificar se determinado atributo existe antes de fazer determinada ação.

No meu caso, tive este problema ao criar um novo tipo de cache que dependia de um atributo que seria criado no setup do mesmo módulo. O problema é que ao executar bin/magento setup:upgrade o Magento limpa o cache antes de executar os scripts de setup dos módulos. Desta forma, o atributo ainda não existia e ocasionava erro.

É claro, esta é apenas uma das várias ocasiões que isso pode ser necessário.

Bom, como podemos ver se um atributo existe?

Os atributos EAV (como clientes, produtos, endereços, etc) são gravados na tabela eav_attribute. Sendo assim, basta fazer adicionar um código com um SELECT * FROM… Brincadeira. Vamos fazer do jeito certo né?

<?php

namespace Magenteiro\Exemplo\Simples;

class Magenteiro
{
    /**
     * @var \Magento\Eav\Model\Config
     */
    private $eavConfig;

    public function __construct(\Magento\Eav\Model\Config $eavConfig)
    {
        $this->eavConfig = $eavConfig;
    }

    /**
     * Verifica existência de atributo de Produto
     * @param $attributeCode
     *
     * @return bool
     * @throws \Magento\Framework\Exception\LocalizedException
     */
    public function isProductAttributeAvailable($attributeCode)
    {
        $attribute = $this->eavConfig->getAttribute(\Magento\Catalog\Model\Product::ENTITY, $attributeCode);
        return ($attribute && $attribute->getId());
    }

    /**
     * Verifica existência de atributo de Cliente
     * @param $attributeCode
     *
     * @return bool
     * @throws \Magento\Framework\Exception\LocalizedException
     */
    public function isCustomerAttributeAvailable($attributeCode)
    {
        $attribute = $this->eavConfig->getAttribute(\Magento\Customer\Model\Customer::ENTITY, $attributeCode);
        return ($attribute && $attribute->getId());
    }
}

Como podemos ver, basta injetar a classe \Magento\Eav\Model\Config e chamar o método getAttribute para obter o atributo. Caso o retorno seja falso ou não tenha um ID, o atributo não está disponível.

Essa foi fácil, não é mesmo?

Aprenda mais no nosso curso de desenvolvimento para Magento 2.

Inspirado no artigo original de Scommerce (em Inglês).

Últimos posts por Ricardo Martins (exibir todos)
Comentários

Deixe seu comentário

[fbcomments url="https://www.magenteiro.com/blog/magento-2/verificar-existencia-atributo/"]