Laravel, Sklep, Koszyk

0

Cześć.
Kiedy mamy sklep użytkownik może dodawać do koszyka kolejne produkty nawet kiedy nie jest zalogowany.
Chciałbym zrobić coś dosłownie takiego samego jednak nie do końca wiem jak.
Ogólnie, myślę że jedynym rozsądnym rozwiązaniem jest przechowywanie produktów w koszyku w sesji.
I tutaj prosta rzeczy robię po prostu

$products = $request->all();
Session::put('products', $products);

wtedy mam tablicę z tym co dodałem do koszyka czyli product_id, wybrany rozmiar etc.
Problem polega na tym że nie wiem jak ten koszyk aktualizować, w sensie jeśli chcę do niego dodać kolejny produkt ten pierwszy po prostu zostaje nadpisany a w koszyku zawsze jest jeden

0

A co stoi na przeszkodzie żebyś najpierw odczytał zawartość sesji do jakiejś zmiennej pomocniczej, następnie jeśli coś już było w sesji to dodał to do listy produktów a na koniec tak połączone dane znów zapisał do sesji?

0
jurek1980 napisał(a):

A co stoi na przeszkodzie żebyś najpierw odczytał zawartość sesji do jakiejś zmiennej pomocniczej, następnie jeśli coś już było w sesji to dodał to do listy produktów a na koniec tak połączone dane znów zapisał do sesji?
Chodzi o połączenie. Nie wiem jak to połączyć.

1

Coś takiego, pisane z palca

$products = $request->all();
//o ile pamiętam Session::get zwraca albo false albo wartość z danego klucza
$old = Session::get('products', $products);
if ($old){
    //zakładając, że $products to kolekcja, jak jest np. array to zrób array_merge
    $products->merge($old);
}
Session::put('products', $products);
0

Oki, teraz już rozumiem. Mam jednak jeszcze jeden problem. Po użyciu array_merge zamiast połączonych dwóch tablic mam tylko jedną, w sensie nie jedną z danymi z dwoma tylko jedną czyli tak jakby ostatni produkt. Tutaj myślę że to będzie wina kluczy ponieważ tak wyglądają tablice (nowy produkt i ten z sesji)

array:5 [▼
  "_token" => "bbpW85qEkDXNk9qJ5piHHlkpYmODEc0B7wkyZQMl"
  "product_id" => "2"
  "size" => "xs"
  "quantity" => "2"
  "color" => "#9a2642"
]
array:5 [▼
  "_token" => "bbpW85qEkDXNk9qJ5piHHlkpYmODEc0B7wkyZQMl"
  "product_id" => "2"
  "size" => "xs"
  "quantity" => "2"
  "color" => "#2dda45"
]

klucze są identyczne

0

Do $products tym samym potem do sesji nie wrzucaj całego $request, jeśli to nie są dane Ci potrzebne.
Do obsłużenia masz przypadki:

  • dodanie do koszyka
  • zmiana ilości produkt
  • usunięcie produktu.

Musisz takie przypadki oprogramować.
Spróbuj pomyśleć jak możesz to wykonać.
Zauważyłem jeszcze jedno. Kolor dajesz tu oddzielnie.
Ja bym kolor przypisał do produktu. Tutaj już pozostaje tylko obsługa id i ilości.
Zakładając, że produkt Y czerwony może kosztować x, a
Y niebieski 2x to jak obsugujesz taki przypadek na swojej bazie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0