Az alábbi Laravel Session arrayben hogyan tudom a "quantity"-t updatelni?
Dióhéjban:
Egy 2 dimenziós array egyik indexe alatt lévő "quantity"-t kellene updatelni. Van egy html form amiben van egy + gomb és ha rákattint a felhasználó akkor a quantity-t növeli 1-el. Arra tippelek, hogy egy loop-al végig kellene menni az arrayen, de nem tudom megcsinálni.
Alap array, mielőtt növelnénk:
array:2 [▼
0 => array:7 [▼
"id" => 6
"brand" => "Huawei"
"type" => "P30"
"color" => "Black"
"weight" => 200
"screen_size" => 6.25
"quantity" => 1
]
1 => array:7 [▼
"id" => 46
"brand" => "Huawei"
"type" => "P 20"
"color" => "Black"
"weight" => 202
"screen_size" => 6.19
"quantity" => 1
]
]
Ezzel a functionnal próbálkoztam hiába:
public function quantityAdd(Request $request) {
// array index. 0,1 stb.
$index = $request->key;
// jelenlegi mennyiség
$quantity = Session::get('cart')[$index]['quantity'];
// növelés 1-el
$add = $quantity+1;
$cart = Session::get('cart');
// ez lenne az update...
session()->put('cart.quantity', $cart);
$item = Session::get('cart');
dd($item);
return redirect()->back();
}
Ezt az eredményt kapom:
array:3 [▼
0 => array:7 [▼
"id" => 6
"brand" => "Huawei"
"type" => "P30"
"color" => "Black"
"weight" => 200
"screen_size" => 6.25
"quantity" => 1
]
1 => array:7 [▼
"id" => 46
"brand" => "Huawei"
"type" => "P 20"
"color" => "Black"
"weight" => 202
"screen_size" => 6.19
"quantity" => 1
]
"quantity" => array:2 [▼
0 => array:7 [▼
"id" => 6
"brand" => "Huawei"
"type" => "P30"
"color" => "Black"
"weight" => 200
"screen_size" => 6.25
"quantity" => 1
]
1 => array:7 [▶]
]
]
Tudom, hogy van erre kész modul vagy nem tudom minek nevezik, de sajátot akarok csinálni.
// ez lenne az update...
session()->put('cart.quantity', $add);
Ezt véletlen írtam át.
array:3 [▼
0 => array:7 [▶]
1 => array:7 [▶]
"quantity" => 2
]
Szóval ez az eredmény. Ami nem jó. Mert nekem az 0-as index alatti elem quantity-jét kell, hogy átírja. Vagy az 1-es elemét. Attól függ melyikre kattintok.
Hasznald a dokumentaciot, Laravele szerintem az egyik legjobb.
session()->put('cart.quantity', $add);
ezzel csak hozzaadsz egy elemet a car arrayhez
neked cart.'.$index.'.quantity kell
<form method="post" action="{{ route('cart.quantityAdd') }}">
@csrf
<input type="hidden" name="key" value="{{ $key }}">
<button>+</button>
</form>
public function quantityAdd(Request $request) {
// array index
$index = $request->key;
// item data in the cart
$id = Session::get('cart')[$index]['id'];
$brand = Session::get('cart')[$index]['brand'];
$type = Session::get('cart')[$index]['type'];
$color = Session::get('cart')[$index]['color'];
$weight = Session::get('cart')[$index]['weight'];
$screen_size = Session::get('cart')[$index]['screen_size'];
$quantity = Session::get('cart')[$index]['quantity'];
$item = [
'id' => $id,
'brand' => $brand,
'type' => $type,
'color' => $color,
'weight' => $weight,
'screen_size' => $screen_size,
'quantity' => $quantity+1
];
session()->put('cart.'.$index, $item);
return redirect()->back();
}
Végül így csináltam meg. Az adott index alatt frissítem az összes adatot.
Eredmény:
array:2 [▼
1 => array:7 [▼
"id" => 46
"brand" => "Huawei"
"type" => "P 20"
"color" => "Black"
"weight" => 202
"screen_size" => 6.19
"quantity" => 2
]
2 => array:7 [▼
"id" => 6
"brand" => "Huawei"
"type" => "P30"
"color" => "Black"
"weight" => 200
"screen_size" => 6.25
"quantity" => 1
]
]
Biztos, hogy nem a legjobb megoldás, de működik, szóval örülök.
if ($request->session()->has('cart')) {
$key = $request->key;
$cart = session('cart');
$cart[$key]['quantity'] = $cart[$key]['quantity'] + 1;
$request->session()->put('cart', $cart);
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!