Magento - Przenoszenie klientów i zamówień z bazy do bazy

Opublikował:‌ WG Admin
Kategorie: Konfiguracja

Upgrade sklepu opartego na systemie magento wymaga trochę więcej czasu niż aktualizacja standardowego CMS-a. Przeważnie całość odbywa się na kopi aktualnego sklepu, który w tym czasie będzie się wzbogacał o nowych klientów, zamówienia, faktury, wysyłki itp, itd. Gdy ukończymy prace nad podnoszeniem wersji magento do wyższej, trzeba uzupełnić bazę o brakujące elementy.

Obraz nr.1 - tabela eav_entity_store

Przedstawię proces przenoszenia odbywający się głównie w obrębie bazy danych.

Na początek musimy się zalogować do naszej starej/aktualnej bazy danych sklepu (Ja używam do tego celu phpMyAdmina). Po zalogowaniu się musimy zlokalizować tabelę eav_entity_store - gdy poddamy ją edycji powinniśmy ujrzeć coś podobnego do tego co znajduje się na obrazie nr. 1.

Nas interesować będzie ostatnia kolumna: increment_last_id - najlepiej zrobić sobie zrzut ekranu z tej tabeli lub wartości przekopiować do notatnika - przydadzą się nam pod sam koniec przenoszenia.

To było łatwe... teraz ciut trudniejsza sprawa. Będziemy musieli wyeksportować kilkanaście tabel - będą to wszystkie tabele, które rozpoczynają się od customers_ i sales_ czyli:

Kod:  Zaznacz wszystko  |  Linenumbers on/off
  1. 'customer_address_entity'
  2. 'customer_address_entity_datetime'
  3. 'customer_address_entity_decimal'
  4. 'customer_address_entity_int'
  5. 'customer_address_entity_text'
  6. 'customer_address_entity_varchar'
  7. 'customer_eav_attribute'
  8. 'customer_eav_attribute_website'
  9. 'customer_entity'
  10. 'customer_entity_datetime'
  11. 'customer_entity_decimal'
  12. 'customer_entity_int'
  13. 'customer_entity_text'
  14. 'customer_entity_varchar'
  15. 'customer_form_attribute'
  16. 'customer_group'
Kod:  Zaznacz wszystko  |  Linenumbers on/off
  1. 'sales_bestsellers_aggregated_daily';
  2. 'sales_bestsellers_aggregated_monthly';
  3. 'sales_bestsellers_aggregated_yearly';
  4. 'sales_billing_agreement';
  5. 'sales_billing_agreement_order';
  6. 'sales_flat_creditmemo';
  7. 'sales_flat_creditmemo_comment';
  8. 'sales_flat_creditmemo_grid';
  9. 'sales_flat_creditmemo_item';
  10. 'sales_flat_invoice';
  11. 'sales_flat_invoice_comment';
  12. 'sales_flat_invoice_grid';
  13. 'sales_flat_invoice_item';
  14. 'sales_flat_order';
  15. 'sales_flat_order_address';
  16. 'sales_flat_order_grid';
  17. 'sales_flat_order_item';
  18. 'sales_flat_order_payment';
  19. 'sales_flat_order_status_history';
  20. 'sales_flat_quote';
  21. 'sales_flat_quote_address';
  22. 'sales_flat_quote_address_item';
  23. 'sales_flat_quote_item';
  24. 'sales_flat_quote_item_option';
  25. 'sales_flat_quote_payment';
  26. 'sales_flat_quote_shipping_rate';
  27. 'sales_flat_shipment';
  28. 'sales_flat_shipment_comment';
  29. 'sales_flat_shipment_grid';
  30. 'sales_flat_shipment_item';
  31. 'sales_flat_shipment_track';
  32. 'sales_invoiced_aggregated';
  33. 'sales_invoiced_aggregated_order';
  34. 'sales_order_aggregated_created';
  35. 'sales_order_aggregated_updated';
  36. 'sales_order_status';
  37. 'sales_order_status_label';
  38. 'sales_order_status_state';
  39. 'sales_order_tax';
  40. 'sales_order_tax_item';
  41. 'sales_payment_transaction';
  42. 'sales_recurring_profile';
  43. 'sales_recurring_profile_order';
  44. 'sales_refunded_aggregated';
  45. 'sales_refunded_aggregated_order';
  46. 'sales_shipping_aggregated';
  47. 'sales_shipping_aggregated_order';

Podczas wykonywania eksportu powyższych tabel radzę w opcjach tworzenia obiektu zaznaczyć pozycję: Dodaj oświadczenie DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT. Dzięki tej opcji tabela w pierwszej kolejności jest opróżniana z danych a w kolejnym kroku następuje import i zapis danych.

Gdy zakończymy eksport danych musimy wykonać jeszcze jeden bardzo ważny krok. W momencie eksportu i poźniejszego importu danych przy użyciu phpMyAdmina może się pojawić błąd:

Cannot add or update a child row: a foreign key constraint fails

Dzieję się tak ponieważ podczas importowania danych przenoszone są dane jeden do jednego - bez względu na logiczną strukturę i integralność bazy danych. Aby zaimportować plik SQL bez ograniczeń i dodatkowej kontroli kluczy, wystarczy dodać następujące instrukcje na początku swojego pliku SQL:

Kod:  Zaznacz wszystko  |  Linenumbers on/off
  1. SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT;
  2. SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS;
  3. SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION;
  4. SET NAMES utf8;
  5. SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
  6. SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
  7. SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO';
  8. SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0;

Na samym końcu naszego pliku całość zamykamy następującym blokiem:

Kod:  Zaznacz wszystko  |  Linenumbers on/off
  1. SET SQL_MODE=@OLD_SQL_MODE;
  2. SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
  3. SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
  4. SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT;
  5. SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS;
  6. SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION;
  7. SET SQL_NOTES=@OLD_SQL_NOTES;

Tak przygotowany plik możemy zaimportować do naszej drugiej bazy - nowego sklepu. Logujemy się i rozpoczynamy import.

W ten sposób wszelkie dane klientów, zamówień itd zostaną zaktualizowane do tego co mamy w danym momencie w działającym sklepie.

Teraz następuje moment, w którym wykorzystamy dane z tabeli eav_entity_store. Znajdujemy tę tabelę w naszej nowej bazie danych i przepisujemy parametry z dotychczasowej bazy. Już wyjaśniam co to są za dane - idąc od góry:

  • Dane dotyczące ostatniego zamówienia
  • Dane ostatniej faktury
  • Dane ostatniej wysyłki

Są one konieczne do tego, by magento zapisało nam kolejne zamówienie, fakturę, nr wysyłki w bazie danych.

Wasze komentarze:

comments powered by Disqus

Komentowanie - zasady

Autorzy komentarzy zamieszczonych w serwisie webground.pl publikują swoje opinie wyłącznie na własną odpowiedzialność.

Właściciel serwisu webground.pl nie ponosi żadnej odpowiedzialności za treści umieszczone przez użytkowników portalu