As alterações nas categorias não estão sendo salvas
Este artigo fornece uma correção para, ao atualizar categorias de produto por meio do Administrador do Commerce, as alterações não são exibidas no Administrador e na loja. O problema é causado pelos dados corrompidos na tabela catalog_category_entity
. Para resolver o problema, corrija ou remova os registros de atualização de categoria problemáticos na tabela. Depois disso, você poderá atualizar as categorias de produto usando o Administrador.
Problema
Depois de fazer alterações em uma categoria de produto no Administrador e salvar, as novas atualizações não são salvas nem exibidas no Administrador e na loja.
Etapas a serem reproduzidas
- Ir para Catálogo > Categorias.
- Selecione uma categoria.
- Faça as alterações e clique em Salvar.
- Mensagem exibida: Você salvou a categoria.
- Observe que a alteração que você fez não foi salva.
Causa possível: dados corrompidos na tabela catalog_category_entity
O problema é causado pelos mesmos valores na coluna created_in
dos registros de categoria afetados no banco de dados.
Detalhes:
- A tabela do banco de dados
catalog_category_entity
tem dois ou mais registros para a categoria afetada (esses registros têm o mesmo valorentity_id
). - Estes registros de categoria têm os mesmos valores na
created_in
coluna.
Como a segunda entrada do BD (e todas as próximas) aparece no BD para uma mesma categoria?
O segundo registro de DB (e, possivelmente, os próximos) para a categoria afetada significa que houve atualizações de categoria programadas usando o módulo Magento_Staging. O módulo cria um registro adicional para uma categoria no catalog_category_entity
e esse é o comportamento esperado do aplicativo; o problema é que os registros têm os mesmos valores para a coluna created_in
.
Como os mesmos valores são exibidos?
Não podemos expor os motivos da corrupção de dados com certeza. As possíveis razões podem incluir:
- personalizações (código, temas etc.)
- migração de dados incorreta
- restauração de dados incorreta a partir do backup
Pelo que sabemos, essa corrupção de dados não é típica da instância do Adobe Commerce "limpa" (pronta para uso) e não pode ser reproduzida em uma instalação do Adobe Commerce sem personalizações.
Como verificar se esse é o seu problema
A tabela catalog_category_entity
deve ter vários registros para a categoria afetada (os registros devem ter o mesmo valor entity_id
) e pelo menos dois desses registros devem ter os mesmos valores created_in
. Com isso, as atualizações agendadas para Preparo não seriam exibidas no Administrador do Commerce; você só veria o bloco vazio de Alterações agendadas.
Etapas a serem verificadas
- Acesse a tabela catalog_category_entity no banco de dados.
- Filtre entidades por entity_id, com entity_id identificando a categoria afetada.
- Se os valores na coluna criada_em forem os mesmos para entradas diferentes com a mesma entity_id, esse é o nosso caso. Normalmente, os valores de
created_in
são diferentes para cada registro.
Solução
Você pode escolher uma das seguintes soluções:
- Excluir os registros de atualização de categoria problemáticos
- Reparar os registros de atualização de categoria problemáticos
Excluir os registros de atualização de categoria problemáticos
Nesta solução, será necessário definir o valor updated_in
correto para o registro de categoria inicial e excluir todos os outros registros para esta categoria. Isso remove todas as atualizações de categoria programadas.
Siga estas etapas:
- Localize os registros de BD com o
entity_id
da categoria afetada. - Selecione o registro com o maior inteiro na coluna
updated_in
. - Copie o valor
updated_in
do registro selecionado. - Selecione o registro com
row_id
=entity_id
(registro de categoria inicial) e cole o valor copiado na colunaupdated_in
desse registro. - Excluir linha(s) com
row_id
diferente deentity_id
.
Reparar os registros de atualização de categoria problemáticos
- Localize os registros de categoria com o mesmo
entity_id
e o mesmo valorcreated_in
. - Selecione o registro em que
row_id
=entity_id
e copie o valorupdated_in
. - Selecione o registro em que
row_id
não é igual aentity_id
e cole o valorupdated_in
copiado como o valorcreated_in
. Consulte a captura de tela abaixo como uma ilustração. - Verifique se o registro de atualização de categoria, cujo valor
created_in
você atualizou (na etapa 3), existe na tabelastaging_update
. Por exemplo: SE o valorcreated_in
copiado for 1509281953, a entidade comrow_id
= 1509281953 deverá existir na tabelastaging_update
.
Leitura relacionada
Práticas recomendadas para modificar tabelas de banco de dados no Manual de implementação do Commerce