Cursos Magento

Tabelas do Magento: Entenda

, ,

Publicado em 12 de julho de 2022

Quer saber onde o Magento guardou aquela informação específica no seu banco de dados? Conhecer as principais tabelas do Magento é algo importante em várias situações e integrações.

Por isso, vamos te dar uma mãozinha. Neste artigo vou mostrar onde você encontra as principais informações de sua loja Magento no banco de dados.

Vamos lá?

Pedidos

Tabelas de pedido (order) no Magento 2

Existem pelo menos uma dúzia de tabelas relacionadas a pedidos no Magento 2. No entanto, as que trazem a maior parte de informações são aquelas cujo nome começam com sales_order_.

As principais serão a sales_order e sales_order_grid. A primeira lhe dará informações detalhadas sobre pedidos, enquanto a segunda lhe traz um resumo do mesmo.

Informações de Pagamento

Na tabela sales_order_payment você encontrará detalhes sobre o pagamento de cada pedido, incluindo totais faturados, reembolsados, tanto na moeda base da loja, como na moeda escolhida pelo usuário.

Nesta tabela também é possível ver o meio de pagamento utilizado e, dependendo do meio de pagamento, também é possível encontrar informações detalhadas sobre parcelamento, código de transação, bandeira do cartão, e outras informações relevantes.

Histórico do pedido e comentários

A tabela de histórico de pedido (sales_order_status_history) armazena informações de troca de status e comentários.

EAV

Clientes, produtos e categorias são as principais entidades que utilizam o modelo EAV. Portanto suas informações são armazenadas em tabelas diferentes, de acordo com o tipo de dado sendo armazenado, ou seja, dependendo do tipo de atributo.

Atributos de texto pequeno, por exemplo, serão geralmente armazenados em uma tabela com sufixo _varchar, enquanto atributos com valor numérico serão armazenados nas _int.

Isso é melhor explicado no Magento 2: O Curso, na seção sobre banco de dados.

A tabela eav_attribute armazena a definição dos atributos. Ou seja, ela define o código do atributo, tipo de entidade, e definições de como este atributo é tratado no frontend e no backend da loja.

A coluna entity_type_id define o tipo de entidade (cliente, produto, etc), de acordo com os valores possíveis listados na eav_entity_type.

O entendimento deste mecanismo e seus vínculos serão úteis para relacionar atributos de clientes, pedidos, categorias, pedidos e a maior parte das entidades que usam EAV no Magento.

O uso de EAV permite que adicionemos atributos à estas entidades sem precisar modificar a estrutura de suas tabelas.

Clientes e endereços do cliente

São guardados nas tabelas de prefixo customer_entity_ e customer_address_entity_.

Tabelas de cliente e endereço de cliente no Magento

As informações básicas do cliente (nome, e-mail, senha, etc) são armazenados na tabela customer_entity. Por sua vez, as informações básicas de endereço são salvos na tabela customer_address_entity.

Os dados de região/estado (region_id) referem-se à tabela directory_country_region.

Produtos (Catálogo)

São representadas pelo maior grupo de tabelas do Magento. Tabelas temporárias, tabelas agregadas, e de índice são algumas das que fazem parte da coleção de tabelas de catálogo no Magento.

Elas são identificadas pelo prefixo catalog_product_.

O Básico

As informações básicas do tipo de produto e sku são salvos na tabela catalog_product_entity.

Dependendo do grupo de atributos do produto (catalog_product_entity.attribute_set_id) o produto terá diferentes atributos, salvos em diferentes tabelas conforme seu tipo de dado (EAV).

Sendo assim, ao observar a tabela catalog_product_entity_varchar por exemplo, podemos ver que o attribute_id 73 corresponde ao nome do produto (SELECT * FROM eav_attribute WHERE attribute_id = 73).

Ou se desejar ver todos os atributos disponíveis de produto, podemos fazer SELECT * from eav_attribute WHERE entity_type_id = 4. Veja uma amostra:

+------------+--------------+---------------+---------------+--------------+-------------------------------------------------+---------------------------------------------------------+------------+-------------+--------------+--------------+------------+-----------+---------------+-------------+---------+----+
|attribute_id|entity_type_id|frontend_label |attribute_code |frontend_input|attribute_model                                  |backend_model                                            |backend_type|backend_table|frontend_model|frontend_class|source_model|is_required|is_user_defined|default_value|is_unique|note|
+------------+--------------+---------------+---------------+--------------+-------------------------------------------------+---------------------------------------------------------+------------+-------------+--------------+--------------+------------+-----------+---------------+-------------+---------+----+
|137         |4             |Activity       |activity       |multiselect   |NULL                                             |Magento\Eav\Model\Entity\Attribute\Backend\ArrayBackend  |varchar     |NULL         |NULL          |NULL          |NULL        |0          |1              |             |0        |NULL|
|143         |4             |Category Gear  |category_gear  |multiselect   |NULL                                             |Magento\Eav\Model\Entity\Attribute\Backend\ArrayBackend  |varchar     |NULL         |NULL          |NULL          |NULL        |0          |1              |             |0        |NULL|
|105         |4             |Categories     |category_ids   |text          |NULL                                             |Magento\Catalog\Model\Product\Attribute\Backend\Category |static      |NULL         |NULL          |NULL          |NULL        |0          |0              |NULL         |0        |NULL|
|156         |4             |Climate        |climate        |multiselect   |NULL                                             |Magento\Eav\Model\Entity\Attribute\Backend\ArrayBackend  |varchar     |NULL         |NULL          |NULL          |NULL        |0          |1              |             |0        |NULL|
|154         |4             |Collar         |collar         |multiselect   |NULL                                             |Magento\Eav\Model\Entity\Attribute\Backend\ArrayBackend  |varchar     |NULL         |NULL          |NULL          |NULL        |0          |1              |             |0        |NULL|
|93          |4             |Color          |color          |select        |Magento\Catalog\Model\ResourceModel\Eav\Attribute|Magento\Eav\Model\Entity\Attribute\Backend\DefaultBackend|int         |NULL         |NULL          |NULL          |NULL        |0          |1              |49           |0        |NULL|
|166         |4             |Correios Depth |correios_depth |text          |NULL                                             |NULL                                                     |text        |NULL         |NULL          |NULL          |NULL        |0          |1              |NULL         |0        |NULL|
|165         |4             |Correios Height|correios_height|text          |NULL                                             |NULL                                                     |text        |NULL         |NULL          |NULL          |NULL        |0          |1              |NULL         |0        |NULL|
|164         |4             |Correios Width |correios_width |text          |NULL                                             |NULL                                                     |text        |NULL         |NULL          |NULL          |NULL        |0          |1              |NULL         |0        |NULL|
|81          |4             |Cost           |cost           |price         |NULL                                             |Magento\Catalog\Model\Product\Attribute\Backend\Price    |decimal     |NULL         |NULL          |NULL          |NULL        |0          |1              |NULL         |0        |NULL|
+------------+--------------+---------------+---------------+--------------+-------------------------------------------------+---------------------------------------------------------+------------+-------------+--------------+--------------+------------+-----------+---------------+-------------+---------+----+

Produtos Configuráveis

Produtos configuráveis são sempre associados à produtos simples.

Por sua vez, a tabela responsável por fazer esta ligação é a catalog_product_super_link.

select cpsl.*, cpe.sku
from catalog_product_super_link cpsl
inner join catalog_product_entity cpe on cpsl.parent_id = cpe.entity_id
+-------+----------+---------+----+
|link_id|product_id|parent_id|sku |
+-------+----------+---------+----+
|1      |53        |68       |MH01|
|2      |54        |68       |MH01|
|3      |55        |68       |MH01|
|4      |56        |68       |MH01|
|5      |57        |68       |MH01|
|6      |58        |68       |MH01|
|7      |59        |68       |MH01|
|8      |60        |68       |MH01|
|9      |61        |68       |MH01|
|10     |62        |68       |MH01|
+-------+----------+---------+----+

A coluna parent_id representa o produto configurável ao qual o produto simples (product_id pertence).

Relações de Produtos (Agrupados, Cross-sell, etc)

Produtos agrupados, relacionados, venda cruzada e upsell são relacionados na tabela catalog_product_link.

O tipo de relação é identificado na coluna link_type_id e possui relação direta com a tabela catalog_product_link_type.

+------------+----------+
|link_type_id|code      |
+------------+----------+
|1           |relation  |
|3           |super     |
|4           |up_sell   |
|5           |cross_sell|
+------------+----------+

Quando link_type_id é igual a 3, temos o vínculo de um produto agrupado. Desta forma, se quisermos saber quais produtos simples pertencem a um produto agrupado cujo entity_id do produto pai é 45, podemos fazer:

select * from catalog_product_link cpl
inner join catalog_product_entity cpe on cpe.entity_id = cpl.product_id
where cpl.product_id = 45
+-------+----------+-----------------+------------+---------+----------------+-------+--------------+-----------+----------------+-------------------+-------------------+
|link_id|product_id|linked_product_id|link_type_id|entity_id|attribute_set_id|type_id|sku           |has_options|required_options|created_at         |updated_at         |
+-------+----------+-----------------+------------+---------+----------------+-------+--------------+-----------+----------------+-------------------+-------------------+
|1      |45        |33               |3           |45       |11              |grouped|24-WG085_Group|0          |0               |2020-07-29 06:40:48|2020-07-29 06:40:48|
|2      |45        |34               |3           |45       |11              |grouped|24-WG085_Group|0          |0               |2020-07-29 06:40:48|2020-07-29 06:40:48|
|3      |45        |35               |3           |45       |11              |grouped|24-WG085_Group|0          |0               |2020-07-29 06:40:48|2020-07-29 06:40:48|
+-------+----------+-----------------+------------+---------+----------------+-------+--------------+-----------+----------------+-------------------+-------------------+

Para entender mais sobre o que é venda cruzada, upsell, e como tirar melhor proveito dos tipos de produtos e recursos disponíveis, aprenda a administrar e gerenciar uma loja Magento.

Estoque e Inventário

Informações de estoque e reserva de estoque são salvos nas tabelas com prefixo cataloginventory_stock e inventory_.

Informações de configuração de estoque de cada item são encontradas na tabela cataloginventory_stock_item em conjunto com informações atuais de estoque.

+-------+----------+--------+--------+-------+------------------+--------------+----------+---------------------+------------+-----------------------+------------+-----------------------+-----------+--------------+----------------+---------------------------+------------+-----------------------+-------------------------+-------------------------+--------------+-------------------------+---------------------+------------------+----------+
|item_id|product_id|stock_id|qty     |min_qty|use_config_min_qty|is_qty_decimal|backorders|use_config_backorders|min_sale_qty|use_config_min_sale_qty|max_sale_qty|use_config_max_sale_qty|is_in_stock|low_stock_date|notify_stock_qty|use_config_notify_stock_qty|manage_stock|use_config_manage_stock|stock_status_changed_auto|use_config_qty_increments|qty_increments|use_config_enable_qty_inc|enable_qty_increments|is_decimal_divided|website_id|
+-------+----------+--------+--------+-------+------------------+--------------+----------+---------------------+------------+-----------------------+------------+-----------------------+-----------+--------------+----------------+---------------------------+------------+-----------------------+-------------------------+-------------------------+--------------+-------------------------+---------------------+------------------+----------+
|1      |1         |1       |100.0000|0.0000 |1                 |0             |0         |1                    |1.0000      |1                      |0.0000      |1                      |1          |NULL          |NULL            |1                          |0           |1                      |0                        |1                        |0.0000        |1                        |0                    |0                 |0         |
|2      |2         |1       |100.0000|0.0000 |1                 |0             |0         |1                    |1.0000      |1                      |0.0000      |1                      |1          |NULL          |NULL            |1                          |0           |1                      |0                        |1                        |0.0000        |1                        |0                    |0                 |0         |
|3      |3         |1       |100.0000|0.0000 |1                 |0             |0         |1                    |1.0000      |1                      |0.0000      |1                      |1          |NULL          |NULL            |1                          |0           |1                      |0                        |1                        |0.0000        |1                        |0                    |0                 |0         |
|4      |4         |1       |100.0000|0.0000 |1                 |0             |0         |1                    |1.0000      |1                      |0.0000      |1                      |1          |NULL          |NULL            |1                          |0           |1                      |0                        |1                        |0.0000        |1                        |0                    |0                 |0         |
|5      |5         |1       |100.0000|0.0000 |1                 |0             |0         |1                    |1.0000      |1                      |0.0000      |1                      |1          |NULL          |NULL            |1                          |0           |1                      |0                        |1                        |0.0000        |1                        |0                    |0                 |0         |
|6      |6         |1       |100.0000|0.0000 |1                 |0             |0         |1                    |1.0000      |1                      |0.0000      |1                      |1          |NULL          |NULL            |1                          |0           |1                      |0                        |1                        |0.0000        |1                        |0                    |0                 |0         |
|7      |7         |1       |100.0000|0.0000 |1                 |0             |0         |1                    |1.0000      |1                      |0.0000      |1                      |1          |NULL          |NULL            |1                          |0           |1                      |0                        |1                        |0.0000        |1                        |0                    |0                 |0         |
|8      |8         |1       |100.0000|0.0000 |1                 |0             |0         |1                    |1.0000      |1                      |0.0000      |1                      |1          |NULL          |NULL            |1                          |0           |1                      |0                        |1                        |0.0000        |1                        |0                    |0                 |0         |
|9      |9         |1       |100.0000|0.0000 |1                 |0             |0         |1                    |1.0000      |1                      |0.0000      |1                      |1          |NULL          |NULL            |1                          |0           |1                      |0                        |1                        |0.0000        |1                        |0                    |0                 |0         |
|10     |10        |1       |100.0000|0.0000 |1                 |0             |0         |1                    |1.0000      |1                      |0.0000      |1                      |1          |NULL          |NULL            |1                          |0           |1                      |0                        |1                        |0.0000        |1                        |0                    |0                 |0         |
+-------+----------+--------+--------+-------+------------------+--------------+----------+---------------------+------------+-----------------------+------------+-----------------------+-----------+--------------+----------------+---------------------------+------------+-----------------------+-------------------------+-------------------------+--------------+-------------------------+---------------------+------------------+----------+

Na tabela inventory_source_item é possível encontrar uma lista mais simples de estoque por SKU inclusive.

+--------------+-----------+-------+--------+------+
|source_item_id|source_code|sku    |quantity|status|
+--------------+-----------+-------+--------+------+
|1             |default    |24-MB01|100.0000|1     |
|2             |default    |24-MB04|100.0000|1     |
|3             |default    |24-MB03|100.0000|1     |
|4             |default    |24-MB05|100.0000|1     |
|5             |default    |24-MB06|100.0000|1     |
|6             |default    |24-MB02|100.0000|1     |
|7             |default    |24-UB02|100.0000|1     |
|8             |default    |24-WB01|100.0000|1     |
|9             |default    |24-WB02|100.0000|1     |
|10            |default    |24-WB05|100.0000|1     |
+--------------+-----------+-------+--------+------+

Configurações

As configurações de loja que você realiza em Lojas > Configuração são salvas na tabela core_config_data. Isto inclui configurações como nome da loja, localização, meios de pagamento ativos e inativos, e muito mais.

Note que seus valores podem ser sobrescrevidos por variáveis de ambiente e arquivos de configuração.

Categorias

Informações de categorias são obtidas principalmente nas tabelas com prefixo catalog_category_.

A tabela catalog_category_entity armazena as informações básicas da categoria, tais como posição, subnível e número de filhos.

A tabela catalog_category_flat_store_X armazena informações consolidadas dos principais atributos de categoria separados por loja. Onde X representa o código da loja.

Exemplo: SELECT * FROM catalog_category_flat_store_1:

+---------+----------------+---------+------------------------+---------------+---------+-----------------+-----------------------+-------------------+-------------------+--------+--------+-----+--------------+--------+------------+-----------------+--------+------------------------+-------------+------------------+----------------+--------------------+-------------------------+--------------------------+---------------+-----------+------------+------------------+-----+---------+------------+----------------+-------------+----------+-----------+-------------+
|entity_id|attribute_set_id|parent_id|name                    |include_in_menu|is_anchor|url_key          |url_path               |created_at         |updated_at         |path    |position|level|children_count|store_id|all_children|available_sort_by|children|custom_apply_to_products|custom_design|custom_design_from|custom_design_to|custom_layout_update|custom_layout_update_file|custom_use_parent_settings|default_sort_by|description|display_mode|filter_price_range|image|is_active|landing_page|meta_description|meta_keywords|meta_title|page_layout|path_in_store|
+---------+----------------+---------+------------------------+---------------+---------+-----------------+-----------------------+-------------------+-------------------+--------+--------+-----+--------------+--------+------------+-----------------+--------+------------------------+-------------+------------------+----------------+--------------------+-------------------------+--------------------------+---------------+-----------+------------+------------------+-----+---------+------------+----------------+-------------+----------+-----------+-------------+
|1        |3               |0        |Root Catalog            |1              |NULL     |NULL             |NULL                   |2020-07-29 06:11:05|2020-07-29 06:42:30|1       |0       |0    |39            |1       |NULL        |NULL             |NULL    |NULL                    |NULL         |NULL              |NULL            |NULL                |NULL                     |NULL                      |NULL           |NULL       |NULL        |NULL              |NULL |NULL     |NULL        |NULL            |NULL         |NULL      |NULL       |NULL         |
|2        |3               |1        |Default Category        |1              |NULL     |NULL             |NULL                   |2020-07-29 06:11:05|2020-07-29 06:42:30|1/2     |1       |1    |38            |1       |NULL        |NULL             |NULL    |NULL                    |NULL         |NULL              |NULL            |NULL                |NULL                     |NULL                      |NULL           |NULL       |PRODUCTS    |NULL              |NULL |1        |NULL        |NULL            |NULL         |NULL      |NULL       |NULL         |
|3        |3               |2        |Equipamentos            |1              |0        |gear             |gear                   |2020-07-29 06:40:37|2020-08-11 00:03:17|1/2/3   |4       |2    |3             |1       |NULL        |NULL             |NULL    |0                       |NULL         |NULL              |NULL            |NULL                |NULL                     |0                         |NULL           |NULL       |PAGE        |NULL              |NULL |1        |NULL        |NULL            |NULL         |NULL      |NULL       |NULL         |
|4        |3               |3        |Mochilas                |1              |1        |bags             |gear/bags              |2020-07-29 06:40:37|2020-08-11 00:03:28|1/2/3/4 |1       |3    |0             |1       |NULL        |NULL             |NULL    |0                       |NULL         |NULL              |NULL            |NULL                |NULL                     |0                         |NULL           |NULL       |PRODUCTS    |NULL              |NULL |1        |NULL        |NULL            |NULL         |NULL      |NULL       |NULL         |
|5        |3               |3        |Academia                |1              |1        |fitness-equipment|gear/fitness-equipment |2020-07-29 06:40:37|2020-08-11 00:03:39|1/2/3/5 |2       |3    |0             |1       |NULL        |NULL             |NULL    |0                       |NULL         |NULL              |NULL            |NULL                |NULL                     |0                         |NULL           |NULL       |PRODUCTS    |NULL              |NULL |1        |NULL        |NULL            |NULL         |NULL      |NULL       |NULL         |
|6        |3               |3        |Relógios                |1              |1        |watches          |gear/watches           |2020-07-29 06:40:37|2020-08-11 00:03:51|1/2/3/6 |3       |3    |0             |1       |NULL        |NULL             |NULL    |0                       |NULL         |NULL              |NULL            |NULL                |NULL                     |0                         |NULL           |NULL       |PRODUCTS    |NULL              |NULL |1        |NULL        |NULL            |NULL         |NULL      |NULL       |NULL         |
|7        |3               |2        |Collections             |0              |0        |collections      |collections            |2020-07-29 06:40:37|2020-07-29 06:42:30|1/2/7   |5       |2    |6             |1       |NULL        |NULL             |NULL    |NULL                    |NULL         |NULL              |NULL            |NULL                |NULL                     |NULL                      |NULL           |NULL       |PAGE        |NULL              |NULL |0        |NULL        |NULL            |NULL         |NULL      |NULL       |NULL         |
|8        |3               |7        |New Luma Yoga Collection|0              |1        |yoga-new         |collections/yoga-new   |2020-07-29 06:40:37|2020-07-29 06:40:37|1/2/7/8 |1       |3    |0             |1       |NULL        |NULL             |NULL    |NULL                    |NULL         |NULL              |NULL            |NULL                |NULL                     |NULL                      |NULL           |NULL       |NULL        |NULL              |NULL |1        |NULL        |NULL            |NULL         |NULL      |NULL       |NULL         |
|9        |3               |2        |Treino                  |1              |0        |training         |training               |2020-07-29 06:40:50|2020-08-11 00:04:03|1/2/9   |5       |2    |1             |1       |NULL        |NULL             |NULL    |0                       |NULL         |NULL              |NULL            |NULL                |NULL                     |0                         |NULL           |NULL       |PAGE        |NULL              |NULL |1        |NULL        |NULL            |NULL         |NULL      |NULL       |NULL         |
|10       |3               |9        |Videos para Download    |1              |1        |training-video   |training/training-video|2020-07-29 06:40:50|2020-08-11 00:04:17|1/2/9/10|1       |3    |0             |1       |NULL        |NULL             |NULL    |0                       |NULL         |NULL              |NULL            |NULL                |NULL                     |0                         |NULL           |NULL       |PRODUCTS    |NULL              |NULL |1        |NULL        |NULL            |NULL         |NULL      |NULL       |NULL         |
+---------+----------------+---------+------------------------+---------------+---------+-----------------+-----------------------+-------------------+-------------------+--------+--------+-----+--------------+--------+------------+-----------------+--------+------------------------+-------------+------------------+----------------+--------------------+-------------------------+--------------------------+---------------+-----------+------------+------------------+-----+---------+------------+----------------+-------------+----------+-----------+-------------+

Conclusão

Praticamente todas as informações disponíveis no banco de dados do Magento também estão disponíveis em suas APIs.

No entanto, há casos onde a leitura destas informações pode ou precisam ser feitas diretamente via banco.

Note que eu disse “leitura”. Escrever ou modificar dados diretamente na base do Magento é altamente perigoso.

Especialmente no que diz respeito à base quentes, ou seja, aquelas que possuem uma loja conectada e realizando vendas em tempo real.

O Magento utiliza tabelas de índice robustas e que são frequentemente atualizadas pelo cron. Ao inserir, remover ou modificar dados de atributos manualmente você corre o risco de comprometer a integridade da loja e comprometer seu comportamento agora ou no futuro.

Em minha jornada com Magento, me deparei com várias lojas com problemas de relacionamento de suas entidades. Problemas que geravam erros diversos e causados por modificações realizadas manualmente meses antes do problema se manifestar.

Se você leu este artigo com intenção de inserir ou modificar registros no Magento para sua integração, saiba que há formas mais seguras para fazê-lo.

No Magento 2: O Curso eu mostro um exemplo de integração de estoque onde modificamos o estoque de milhares de produtos em alguns segundos através de um módulo Magento.

Da mesma forma, você pode consumir as APIs do Magento para ler, inserir e modificar o que precisar. E pode fazer isso de forma individual ou em massa, em apenas alguns segundos. Você pode encontrar uma coleção de exemplos de uso gratuitos da API ou fazer meu curso de integrações usando API, com mais de 650 exemplos de uso.

Esqueci de alguma coisa? Deixe seu comentário abaixo.

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

Deixe seu comentário

[fbcomments url="https://www.magenteiro.com/blog/magento-2/tabelas-do-magento/"]