Как разместить данные в сеансе laravel uing массив массива?

Я пытаюсь сделать тележку и у меня следующие требования: 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); 

            }

моя проблема: когда я пытаюсь добавить третий продукт, он перезаписывает второй, не знаю, как это сделать.

Я пробовал этот код и его работу, но есть ключ элемента, который я использовал еще раз, любое предложение по этому поводу - это структура массива:

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);
            }

использовать Session::put('cart.items',$products["items"])

Leena Patel 22.11.2018 07:27

спасибо за ответ @leena Patel, я проверю через минуту

Jagdish Sharma 22.11.2018 07:28

все еще не работает для третьего элемента, он все еще заменяет то же самое. любое предложение?

Jagdish Sharma 22.11.2018 07:33

Значения одинаковые, может быть поэтому.

Leena Patel 22.11.2018 07:37
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
4
87
2

Ответы 2

Попробуй это:

Session::push('cart.items', $cart1);

для получения дополнительной информации о сеансе взгляните на это:

https://laravel.com/docs/5.7/session#storing-data

Спасибо за ответ, ДЖОШ, я пробовал нажать, но все еще проблема в том же обновлении моего нового кода, подождите ..

Jagdish Sharma 22.11.2018 07:40

Я считаю, что в вашем новый код это любопытная вещь, когда в сеансе нет "тележки".

$products["items"][] = $cart1;  // add new product to 
print_r($products);
Session::put('cart.items', $products);

Этот код выше создаст массив продуктов, вложенных в «элементы», который сам вложен.

[
   "cart" => [
      "items" => [
          "items" => [ $cart1 ]
      ]
   ]
]

Session::push довольно надежен. Он уже предварительно проверяет значение для данного ключа в сеансе перед добавлением к нему данного значения. Когда значение не является массивом, оно инициализирует пустой массив и добавляет заданное значение.

Ветвь if-else становится избыточной при использовании Session::push.

$cart = [/*...*/];
Session::push('cart.items', $cart);

спасибо за ответ Oluwafemi sule сейчас все работает нормально, но проблема с заменой началась снова

Jagdish Sharma 22.11.2018 08:28

О, я вижу. Я думаю, что с if-else что-то происходит, и я не могу это определить. Session::push, похоже, уже делает то, что делает if-else, и делает явную проверку избыточной.

Oluwafemi Sule 22.11.2018 09:56

Другие вопросы по теме