Я пытаюсь сделать корзину и предъявляю следующие требования: 1. когда пользователь нажимает, добавляет в корзину продукт, добавленный в сессию следующим образом:
Array
(
[items] => Array
(
[0] => Array
(
[product_id] => 15
[addtocart_totalmrp] => 8953
[addtocart_totalsellingprice] => 7876
[addtocart_auid] => 7065bec17a101cf2,3025bec186520de3,6725bec18d7889a7
)
[1] => Array
(
[product_id] => 39
[addtocart_totalmrp] => 12654
[addtocart_totalsellingprice] => 11876
[addtocart_auid] => 1675bed115132bc6,755bed11033fe7d
)
),
[2] => Array////which is not coming after 2 it stops and start overwriting the 2nd position
(
[product_id] => 39
[addtocart_totalmrp] => 12654
[addtocart_totalsellingprice] => 11876
[addtocart_auid] => 1675bed115132bc6,755bed11033fe7d
)
)
)
вот мой код:
$cart1 = array("product_id" => $request->product_id,
"addtocart_totalmrp" => $request->addtocart_totalmrp,
"addtocart_totalsellingprice" => $request->addtocart_totalsellingprice,
"addtocart_auid" => $request->addtocart_auid);
if ($request->session()->has('cart')) {
$products = Session::get('cart.items', array()); // get existed products or empty array
$products["items"][] = $cart1; // add new product to list
echo'<pre>';
print_r($products);
Session::push('cart.items', $products); //putting that data to cart
print_r(count($products));
dd($products);
} else {
echo 'session haas no data';
$products["items"][] = $cart1; // add new product to list
print_r($products);
Session::put('cart.items', $products);
}
моя проблема: , когда я пытаюсь добавить третий продукт, он перезаписывает второй, не знаю, как это сделать.
IЯ пробовал этот код и он работает, но есть ключ элемента, который я использовал однажды, когда снова приходил, для этого есть структура массива:
array:1 [
"items" => array:4 [
"items" => array:1 [
0 => array:4 [
"product_id" => "39"
"addtocart_totalmrp" => "12654"
"addtocart_totalsellingprice" => "11876"
"addtocart_auid" => "1675bed115132bc6,755bed11033fe7d"
]
]
0 => array:4 [
"product_id" => "28"
"addtocart_totalmrp" => "17145"
"addtocart_totalsellingprice" => "12165"
"addtocart_auid" => "5205bed102b6d856,8255bed103e3ce14"
]
1 => array:4 [
"product_id" => "15"
"addtocart_totalmrp" => "8953"
"addtocart_totalsellingprice" => "7876"
"addtocart_auid" => "7065bec17a101cf2,3025bec186520de3,6725bec18d7889a7"
]
2 => array:4 [
"product_id" => "15"
"addtocart_totalmrp" => "8953"
"addtocart_totalsellingprice" => "7876"
"addtocart_auid" => "7065bec17a101cf2,3025bec186520de3,6725bec18d7889a7"
]
]
]
мой новый код
if ($request->session()->has('cart')) {
// $productsfromsession = Session::get('cart', array()); // get existed products or empty array
// dd($productsfromsession);
// $products["items"][] = $cart1; // add new product to list
// echo'<pre>';
// print_r($products);
Session::push('cart.items',$cart1); //putting that data to cart
$a=Session::get('cart', array());
//print_r(count($products));
dd($a);
} else {
echo 'session haas no data <pre>';
$products["items"][] = $cart1; // add new product to list
print_r($products);
Session::put('cart.items', $products);
}
Новое обновление кода в соответствии с ответом:
$cart1 = array("product_id" => $request->product_id,
"addtocart_totalmrp" => $request->addtocart_totalmrp,
"addtocart_totalsellingprice" => $request->addtocart_totalsellingprice,
"addtocart_auid" => $request->addtocart_auid);
if ($request->session()->has('cart')) {
Session::push('cart.items',$cart1); //putting that data to cart
$a=Session::get('cart', array());
//print_r(count($products));
dd($a);
} else {
echo 'session haas no data <pre>';
$products = [ $cart1 ]; // create a new cart and add a product in it
Session::put('cart.items', $products);
print_r($products);
}
код работает отлично, но проблема замены снова начала что-то не хватает в моем коде?
вот что я хочу, чтобы мой кодэто спер спросил в ответах:
public function addtocart(Request $request) {
// if user logged in check login and add data directly to cart without session
if (Auth::check()) {
$user = Auth::user();
echo 'auth sucess';
// adding data to table directly //
} else {
// adding data to cart with session
$cart1 = array("product_id" => $request->product_id,
"addtocart_totalmrp" => $request->addtocart_totalmrp,
"addtocart_totalsellingprice" => $request->addtocart_totalsellingprice,
"addtocart_auid" => $request->addtocart_auid);
print_r('am current cart data : <pre>');
print_r($cart1);
// checking for session has cart or not
if (Session::has('cartdata')) {
echo ' session cart has data ';
} else {
echo 'session has no data add first data to session ';
}
}
}
}
Я попробовал новую концепцию структуры JSON, может ли вы помочь мне, где я ошибаюсь, когда я пытаюсь поместить данные в массив, который он идет, и прекратить толкать массив после2-я позиция вот мой код:
// adding data to cart with session
$cartdata = array("product_id" => $request->product_id,
"addtocart_totalmrp" => $request->addtocart_totalmrp,
"addtocart_totalsellingprice" => $request->addtocart_totalsellingprice,
"addtocart_auid" => $request->addtocart_auid);
// print_r('am current cart data : <pre>');
//print_r($cartdata);
// checking for session has cart or not
if (Session::has('cartdata')) {
// dd(Session::get('cartdata'));
echo ' session cart has new data and it is :<pre> ';
//// fethcing old data from session
$productsfromsession = Session::get('cartdata'); // get existed array value
// decoding old data to normal array
$data=json_decode($productsfromsession);
//dd($data);
// pushing new data to old product array
array_push($data->products,$cartdata);
// saving new data and encoding it again
$newdata=json_encode($data);
dd($newdata); ///every time i add data to this array its stop after 2nd inserted
// removing old data from session
$request->session()->forget('cartdata');
// putting new data to session
Session::put('cartdata',$newdata);
// printing result
dd(Session::get('cartdata'));
//// printng current cart data after pusing new data
} else {
echo 'session has no data adding first data to session is <pre>';
// // putting first item to array
$products[]=$cartdata;
$cartdata=array("total_price"=>10,"products"=>$products);
$cartdata=json_encode($cartdata);
Session::put('cartdata', $cartdata);
$data = Session::all();
print_r($data);
}