Zawartość artykułu
Błąd z wczytaniem detali zamówienia w PrestaShop
Nieoczekiwany błąd w PS 1.7.7.1. Objawia on się poniższym monitem po próbie wczytania wybranego zamówienia (co ciekawe inne mogą działać prawidłowo):
Ups ... wygląda na to, że wystąpił nieoczekiwany błąd Type error: Argument 4 passed to PrestaShop\PrestaShop\Core\Domain\Order\QueryResult\OrderShippingAddressForViewing::__construct() must be of the type string, null given, called in /home/prestashop/src/Adapter/Order/QueryHandler/GetOrderForViewingHandler.php on line 270 [Symfony\Component\Debug\Exception\FatalThrowableError 0]
Wgląd w logi, włączenie (jak sugeruje grafika) trybu debugowania i inne analizy nic nie dają..
Okazuje się, że problemem są wartości NULL w polach które nie powinny mieć takich wartości i raczej powinny być stringiem – nawet pustym. Tak z resztą opisuje to ww. błąd.
Natomiast nie wiadomo co może to powodować?! Może niektóre moduły albo konfiguracja serwera? Ewentualnie wbudowany błąd w tę wersję, który zostanie kiedyś poprawiony. Na tę chwilę nie udało nam się tego ustalić.
Pełen wgląd w tą tematykę znajdziesz na Githubie w tym wątku: https://github.com/PrestaShop/PrestaShop/issues/22215
Rozwiązanie.
Ale jak tutaj wybrnąć z tego impasu?
Niezbędne czynności przed naprawą.
Wystarczy odpowiednie zapytanie do bazy danych. Ale uwaga! Najpierw wykonaj kopię bezpieczeństwa bazy danych w zapleczu PrestaShop! Tak na wypadek jakby nasze lekarstwo okazało się gorsze od choroby:) Następnie uzyskaj dostęp do PhpMyAdmin (tam też dobrze jakbyś wykonał/a kopię bezpieczeństwa przez narzędzie Export).
Prefix tabel w bazie danych.
Kolejnym krokiem jest ustalenie prefixu w tabelach w Twojej bazie danych. Standardowo to „ps_” jednak u Ciebie moze być inaczej. Tę informację znajdziesz w dziale Informacje w zapleczu PrestaShop.
Jeśli Twój prefix jest inny od domyślnego – odpowiednio zmień nasze zapytanie SQL.
Zapytanie SQL
A oto lecznicze zapytanie SQL.
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; UPDATE ps_product SET isbn = '' WHERE isbn IS NULL; UPDATE ps_product SET upc = '' WHERE upc IS NULL; UPDATE ps_product SET mpn = '' WHERE mpn IS NULL; UPDATE ps_product SET unity = '' WHERE unity IS NULL; UPDATE ps_product SET supplier_reference = '' WHERE supplier_reference IS NULL; UPDATE ps_product SET location = '' WHERE location IS NULL; UPDATE ps_product SET redirect_type = '301-category' WHERE redirect_type = ''; UPDATE ps_product SET available_date = '2021-03-16' WHERE available_date IS NULL; UPDATE ps_product SET cache_default_attribute = '0' WHERE cache_default_attribute IS NULL; UPDATE ps_product_shop SET unity = '' WHERE unity IS NULL; UPDATE ps_product_shop SET redirect_type = '301-product' WHERE redirect_type = ''; UPDATE ps_product_shop SET available_date = '2021-03-16' WHERE available_date IS NULL; UPDATE ps_product_shop SET cache_default_attribute = '0' WHERE cache_default_attribute IS NULL; update ps_address set dni = '' where dni is null; update ps_address set other = '' where other is null; update ps_address set address2 = '' where address2 is null; update ps_address set company = '' where company is null; update ps_address set vat_number = '' where vat_number is null;
Oczywiście dla Twojego zapytania możesz zastosować inne daty niż ww. „2021-03-16” – ta jest użyta na podstawie daty publikacji tego artykułu:)
Wady i zalety naszego lekarstwa
Niestety nie zapewnia ona braku wystąpienia tego błędu w przyszłości a leczy doraźnie aktualne problemy. Możesz także w razie potrzeby użyć tego ponownie, gdy błąd się znowu pojawi. W każdym razie możesz sprawdzić detale zamówienia, co jest najważniejsze przy obsłudze zamówień w Twoim sklepie!
grafika: alphacoders.com
[…] mniej denerwujący niż ostatnio błąd, na który możesz się natknąć w Twoim sklepie PrestaShop […]