Saya ingin mengurai array objek ini menjadi sesuatu yang dapat dibaca PHP sehingga saya dapat menyimpannya ke dalam database. Inilah larik objek, ini dari log konsol, dan apa yang dikirim ke pos axios saya:

"user_id": 4,
Array [
  Object {
    "cartID": "33S",
    "id": 33,
    "image": "http://myurl/uploads/5db88f40c857dtest.jpg",
    "name": "testt",
    "quantity": 1,
    "size": "S",
  },
  Object {
    "cartID": "32S",
    "id": 32,
    "image": "https://dummyimage.com/600x400/000/fff",
    "name": "pottery",
    "quantity": 1,
    "size": "S",
  },
  Object {
    "cartID": "34S",
    "id": 34,
    "image": "http://myurl/uploads/5db8918fac485test.jpg",
    "name": "Nature",
    "quantity": 1,
    "size": "S",
  },
]

Di PHP saya punya:

public static function AddOrder(Request $request)
{
    $add = DB::table('Orders')->insert([
        'user' => $request->user_id
    ]);

    $items = json_decode($request->cartItems, true);

    foreach ($items as $item) {
        DB::table('order_items')->insert([
            'order_id' => DB::table('orders')->latest('user_id')->first(),
            'product'  => $item->id,
            'quantity' => $item->quantity,
            'size'     => $item->size
        ]);
    }
    return $add;
}

Setiap kali saya mencoba ini, saya selalu mendapatkan kesalahan cartItems can't null. Saya bahkan sudah mencoba mengembalikan cartItems sebelum apa pun di AddOrder dijalankan tetapi hanya mengatakan bahwa itu nol. Saya menggunakan axios untuk mengirimnya seperti:

 axios.post('http://myurl/api/orders/create', {
    cartItems: cart,
    user_id: user.id
  })
  .then(res => {
    console.log(res.data)
  })
  .catch(err => {
    console.log(err)
  })

Saya juga sudah mencoba cara lain

    let newReq = {
      user_id: 1
  };

  for(let i = 0; i < cart.length; i++) {
      Object.keys(cart[i]).forEach((key) => {
          let newkey = 'cartItems[' + i + '][' + key + ']';

          newReq[newkey] = cart[i][key];
      });
  }

Dengan itu dikirim, di Laravel untuk menanggapi klien yang saya gunakan:

return response()->json($request->all());

Saya mendapat

Object {
  "cartItems[0][cartID]": "33S",
  "cartItems[0][id]": 33,
  "cartItems[0][image]": "http://trayvonnorthern.com/Edgewood-API/public/uploads/5db88f40c857dtest.jpg",
  "cartItems[0][name]": "testt",
  "cartItems[0][quantity]": 1,
  "cartItems[0][size]": "S",
  "cartItems[1][cartID]": "32S",
  "cartItems[1][id]": 32,
  "cartItems[1][image]": "https://dummyimage.com/600x400/000/fff",
  "cartItems[1][name]": "pottery",
  "cartItems[1][quantity]": 1,
  "cartItems[1][size]": "S",
  "cartItems[2][cartID]": "34S",
  "cartItems[2][id]": 34,
  "cartItems[2][image]": "http://trayvonnorthern.com/Edgewood-API/public/uploads/5db8918fac485test.jpg",
  "cartItems[2][name]": "Nature",
  "cartItems[2][quantity]": 1,
  "cartItems[2][size]": "S",
  "user_id": 1,
}

Ketika saya melakukannya

return response()->json($request->cartItems);

Itu tidak mengembalikan apa pun.

2
Mike Shiv 30 Oktober 2019, 16:17

2 jawaban

Jawaban Terbaik

Axios tampaknya tidak menerima format permintaan yang saya gunakan pada jawaban saya sebelumnya, jadi saya menghapusnya. Namun, tampaknya menerima permintaan dalam format ini (yang awalnya Anda gunakan. kesalahan saya, sungguh):

let request = {
    user_id: 1,
    cartItems: [
        {
            "cartID": "33S",
            "id": 33,
            "image": "http://myurl/uploads/5db88f40c857dtest.jpg",
            "name": "testt",
            "quantity": 1,
            "size": "S",
        },
        {
            "cartID": "32S",
            "id": 32,
            "image": "https://dummyimage.com/600x400/000/fff",
            "name": "pottery",
            "quantity": 1,
            "size": "S",
        },
        {
            "cartID": "34S",
            "id": 34,
            "image": "http://myurl/uploads/5db8918fac485test.jpg",
            "name": "Nature",
            "quantity": 1,
            "size": "S",
        }
    ]
}

Kemudian, Anda dapat mengirim objek request dengan axios.post. Untuk mengaksesnya di back-end Anda, gunakan $items = $request->cartItems. Tidak perlu menguraikannya.

2
Ayrton 30 Oktober 2019, 15:54

Saat mengirim Objek atau Array ke Laravel API menggunakan Axios, coba ubah payload menjadi string JSON.

Coba ini di sisi klien Anda

const your_payload_object = { user_id : 1, cart_items:[{id:1},{id:2},{id:3}] };

axios.post(url, JSON.stringify(your_payload_object), {"Content-type": "application/json"})

Anda dapat mengakses data di laravel seperti

$userId = $reequest->user_id;

$cart_items = $request->cart_items;

// Which will be an array as given below
//
// $cart_items = 
//      [ 
//         ["id" => 1], 
//         ["id" => 2], 
//         ["id" => 3] 
//      ];
0
Kalesh Kaladharan 30 Oktober 2019, 16:03