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_entitytem 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_incoluna.
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_insã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_idda categoria afetada. - Selecione o registro com o maior inteiro na coluna
updated_in. - Copie o valor
updated_indo registro selecionado. - Selecione o registro com
row_id=entity_id(registro de categoria inicial) e cole o valor copiado na colunaupdated_indesse registro. - Excluir linha(s) com
row_iddiferente deentity_id.
Reparar os registros de atualização de categoria problemáticos
- Localize os registros de categoria com o mesmo
entity_ide o mesmo valorcreated_in. - Selecione o registro em que
row_id=entity_ide copie o valorupdated_in. - Selecione o registro em que
row_idnão é igual aentity_ide cole o valorupdated_incopiado 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_invocê atualizou (na etapa 3), existe na tabelastaging_update. Por exemplo: SE o valorcreated_incopiado 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