Problem z dostępem do zamówień po aktualizacji PrestaShop 1.7.7.1

Po aktualizacji sklepu PrestaShop do wersji 1.7.7.1 napotkaliśmy błąd podczas próby otwarcia strony szczegółów zamówienia.

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

  1. Utwórz kopię bazy danych sklepu
  2. 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.

Musisz się zalogować, aby móc dodać komentarz.