Solucionar problemas
Solución, Argument X passed OrderProductForViewing must be of the type string
Si tras actualizar o migrar PrestaShop, nos encontramos con errores como el siguiente al tratar de acceder a los pedidos y productos, puede ser síntoma de incongruencias en los datos almacenados en la base de datos.
Type error: Argument X passed PrestaShop\PrestaShop\Core\Domain\Order\QueryResult\OrderProductForViewing:_construct() must be of the type string, null given, called in ...GetOrderForViewingHandler.php
En los reportes de Github encontramos la solución, ejecutar una sería de consultas para buscar aquellos datos que estén en NULL y convertirlos a cadenas vacías o valores defecto que sean admitidos por PrestaShop, lo que solucionaría el problema.
No apliques todas las consultas por prevención. Crea una copia verificada de la base, restáurala en un clon y reproduce allí el error. Confirma además el prefijo de las tablas y la versión exacta de PrestaShop.
Antes de cada UPDATE, ejecuta un SELECT COUNT(*) y revisa muestras de las filas afectadas. Por ejemplo:
SELECT COUNT(*) FROM ps_order_detail WHERE product_reference IS NULL; SELECT id_order_detail, id_order, product_reference FROM ps_order_detail WHERE product_reference IS NULL LIMIT 50;
Ejecuta únicamente las correcciones que correspondan al campo NULL identificado en el mensaje y que hayan resuelto el caso en el clon. Para tablas InnoDB, usa una transacción y valida antes de confirmar:
START TRANSACTION; UPDATE ps_address SET phone = '' WHERE phone IS NULL; UPDATE ps_address SET phone_mobile = '' WHERE phone_mobile IS NULL; UPDATE ps_order_detail SET id_order_invoice = '0' WHERE id_order_invoice IS NULL; UPDATE ps_order_detail SET product_reference = '' WHERE product_reference IS NULL; UPDATE ps_order_detail SET product_supplier_reference = '' WHERE product_supplier_reference IS NULL; UPDATE ps_order_detail SET product_isbn = '' WHERE product_isbn IS NULL; UPDATE ps_order_detail SET product_upc = '' WHERE product_upc IS NULL; UPDATE ps_order_detail SET product_mpn = '' WHERE product_mpn IS NULL; UPDATE ps_order_detail SET download_hash = '' WHERE download_hash IS NULL; UPDATE ps_orders SET gift_message = '' WHERE gift_message IS NULL; UPDATE ps_order_payment SET transaction_id = '' WHERE transaction_id IS NULL; UPDATE ps_order_payment SET card_number = '' WHERE card_number IS NULL; UPDATE ps_order_payment SET card_brand = '' WHERE card_brand IS NULL; UPDATE ps_order_payment SET card_expiration = '' WHERE card_expiration IS NULL; UPDATE ps_order_payment SET card_holder = '' WHERE card_holder IS NULL; UPDATE ps_order_carrier SET tracking_number = '' WHERE tracking_number IS NULL; UPDATE ps_order_carrier SET id_order_invoice = '0' WHERE id_order_invoice IS NULL; UPDATE ps_order_carrier SET weight = '0' WHERE weight IS NULL; -- Repite los SELECT de control y usa ROLLBACK durante el ensayo. ROLLBACK;
No se incluyen cambios masivos sobre catálogo, redirecciones o fechas de disponibilidad porque no guardan relación directa con el error de visualización de pedidos y podrían alterar el comportamiento comercial de la tienda.
Cuando las muestras y el clon sean correctos, crea otra copia inmediatamente anterior, detén las escrituras y repite solo las sentencias aprobadas, sustituyendo ROLLBACK por COMMIT. Valida pedidos, pagos, transportistas y registros de error antes de reabrir. Si falla, mantén la tienda cerrada y restaura la copia verificada.
Recuerda modificar el prefijo ps_ si tu instalación usa otro y verificar que todas las tablas afectadas son InnoDB antes de depender de la transacción.
También te puede ayudar