Resolver problemas

PrestaShopException: diagnosticar Invalid address

Revisto a 4 min de leitura base de dados erros PrestaShop

A exceção Invalid address #ID indica que o PrestaShop não conseguiu carregar um endereço válido para esse identificador. O rastreio permite descobrir se vem de um carrinho, de uma encomenda ou de um módulo; não presuma que todos os casos se corrigem pondo um endereço a zero.

Localizar a referência

Anote o ID, a ação, o URL e o rastreio. Trabalhe primeiro sobre uma cópia. Substitua PREFIX_ pelo prefixo real e <ID> pelo número verificado:

SELECT id_address, deleted, active
FROM PREFIX_address
WHERE id_address = <ID>;

SELECT c.id_cart, c.id_address_delivery, c.id_address_invoice, o.id_order
FROM PREFIX_cart c
LEFT JOIN PREFIX_orders o ON o.id_cart = c.id_cart
WHERE c.id_address_delivery = <ID>
   OR c.id_address_invoice = <ID>;

Se o endereço existir, reveja o seu estado e a lógica que o utiliza antes de o modificar. Se existir uma encomenda, preserve o seu endereço histórico; uma referência inexistente pode exigir recuperá-lo a partir de uma cópia e rever a integridade da encomenda.

Caso limitado: carrinho sem encomenda e endereço inexistente

Só quando o rastreio confirmar esse caso, identifique um carrinho concreto e o campo afetado. Este exemplo afeta exclusivamente o endereço de entrega do carrinho selecionado, sem encomenda e cujo endereço não existe. Substitua também <ID_CARRITO>:

START TRANSACTION;

UPDATE PREFIX_cart c
LEFT JOIN PREFIX_orders o ON o.id_cart = c.id_cart
LEFT JOIN PREFIX_address a ON a.id_address = c.id_address_delivery
SET c.id_address_delivery = 0
WHERE c.id_cart = <ID_CARRITO>
  AND c.id_address_delivery = <ID>
  AND o.id_order IS NULL
  AND a.id_address IS NULL;

SELECT id_cart, id_address_delivery, id_address_invoice
FROM PREFIX_cart
WHERE id_cart = <ID_CARRITO>;

ROLLBACK;

A simulação requer tabelas transacionais como InnoDB e a mesma ligação para todas as instruções. Confirme que muda apenas a linha prevista e que ROLLBACK recupera o valor anterior. Não serve como garantia de reversão em MyISAM.

Para verificar o comportamento da aplicação, confirme a alteração apenas no clone e reproduza lá o carrinho. Um pedido web noutra ligação normalmente não verá as alterações ainda não confirmadas da sua transação. O utilizador pode ter de voltar a selecionar o seu endereço.

Se o campo incorreto for o de faturação, prepare e teste a instrução correspondente; não modifique ambos por rotina. Em produção, conserve outra cópia imediatamente anterior e evite escritas concorrentes antes de executar apenas a alteração verificada. Não esvazie carrinhos nem normalize todas as referências órfãs da loja.

Se não conseguir identificar uma única relação e o seu efeito, faculte o rastreio e os identificadores ao suporte ou ao programador sem anexar dados pessoais de endereços.

Também lhe pode ser útil

Algo não bate certo ou mudou? Diga-nos e revemos.