Artykuł archiwalny — sprawdź wersję środowiska. Opis dotyczy konfiguracji z czasu publikacji. Przed wykonaniem poleceń sprawdź zgodność z obecną wersją, przygotuj kopię i wykonaj test poza produkcją. Możemy przeanalizować aktualne środowisko.
Problem z dostępem do zamówień po aktualizacji PrestaShop 1.7.7.1
Włączenie trybu DEBUG
Przy pierwszej próbie wejścia do widoku szczegółów zamówienia otrzymaliśmy całkowicie bezsensowną stronę błędu z informacją, że coś poszło nie tak.
Aby dowiedzieć się więcej o problemie, włączyliśmy tryb DEBUG, zmieniając następujący wiersz kodu w naszym config/defines.php i ustawienie DEBUG na true.
/* Debug only */
if (!defined('_PS_MODE_DEV_')) {
define('_PS_MODE_DEV_', true);
}
Odtworzenie błędu
Następnie wróciliśmy do pulpitu nawigacyjnego i naszej listy zamówień i próbowaliśmy otworzyć szczegóły dowolnego zamówienia. Teraz, że tak powiem, komunikat o błędzie był nieco bardziej pouczający.
PrestaShop Error
Type error: Argument 11 passed to PrestaShop\PrestaShop\Core\Domain\Order\QueryResult\OrderShippingAddressForViewing::__construct() must be of the type string, null given, called in C:\www\prestashop\src\Adapter\Order\QueryHandler\GetOrderForViewingHandler.php on line 270
Po inspekcji kodu okazało się, że PrestaShop 1.7.7.1 wydaje się być mniej wyrozumiały co do wartości NULL w naszych tabelach bazy danych, co nie stanowiło problemu w starszych wersjach.
Niektórzy użytkownicy na forach PrestaShop zasugerowali to rozwiązanie i na szczęście sklep został ponownie uruchomiony.
Przyczyniliśmy się do nagłośnienia problemu w następującym wątku GitHub PrestShop: https://github.com/PrestaShop/PrestaShop/issues/22215#issuecomment-765377211
Modyfikacja bazy danych
- Utwórz kopię bazy danych sklepu
- Otwórz bazę danych za pomocą swojego ulubionego narzędzia (phpMyAdmin) i wklej następującą kwerendę do linii poleceń 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 = '2020-12-01' 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 = '2020-12-01' 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;
Powyższy proces zamienia wartości NULL na wartość innego typu o pustej zawartości (nie jest ona więc NULL).
Pamiętaj aby włączyć tryb DEBUG po udanym procesie.
Nowy problem: „nie znaleziono produktu”
Po kilku dniach napotkaliśmy kolejny problem na zapleczu i na początku nie mogliśmy nawet powiązać go z problemem z bazą danych.Podczas tworzenia ręcznego zamówienia na zapleczu nie udało się znaleźć niektórych produktów, mimo że istniały i były w magazynie.
Jak się okazało, występują również inne wartości NULL w kombinacji produktów – szybka poprawka do bazy danych:
UPDATE ps_product_attribute SET location = '' WHERE location is NULL
Mamy nadzieję, że developerzy wezmą pod uwagę zaistniały problem w nowej wersji PrestaShop i naprawią go w kolejnych wydaniach.



