laravel вернуть массив в ошибку преобразования строки - PullRequest
0 голосов
/ 11 июля 2020

У меня есть метод хранения в моем контроллере, и он возвращает следующие ошибки:

Ошибки

Консоль Preview tab

exception: "ErrorException"
file: "C:\........\vendor\laravel\framework\src\Illuminate\Support\Str.php"
line: 419
message: "Array to string conversion"

Консоль Response tab

   {
        "file": "C:\\........\\app\\Http\\Controllers\\Api\\Front\\CartController.php",
        "line": 380,
        "function": "save",
        "class": "Illuminate\\Database\\Eloquent\\Model",
        "type": "->"
    },

Код

public function checkout(Request $request)
{
    $user = auth('api')->user();
    $cartItems = CartStorage::where('user_id', $user->id)->get();
    $address = AddressUser::where('id', $request->input('address'))->first();

    foreach($cartItems as $item) {
        $cartData = $item->cart_data;
        // add to orders table
        try {
            $order = new Order();
            $order->ordernu = 'Si-'.mt_rand(1000000000, 9999999999);
            $order->user_id = $user->id;
            $order->order_data = $cartData;
            $order->quantity = $cartData['quantity'];
            $order->price = $request->input('totalPrice');
            $order->courier = $request->input('courier');
            $order->courier_service = $request->input('courierService');
            $order->shippingcode = $request->input('shippingcode');
            $order->shipping_price = $request->input('shippingPrice');
            $order->address = $address->address;
            $order->kecamatan = $address->kecamatan;
            $order->kelurahan = $address->kelurahan;
            $order->kota = $address->kota;
            $order->provinsi = $address->provinsi;
            $order->postalcode = $address->postalcode;
            $order->weight = $request->input('weight');
            $order->phone = $request->input('phone');
            $order->buyer_name = $user->name;
            $order->buyer_email = $user->email;
            $order->note = $request->input('note');
            $order->received = false;
            $order->save();

            // reduce stock of each product
            foreach ($cartItems as $item) {
                $cartData = $item->cart_data;
                $product = Product::find($cartData['productId']);
                $product->decrement('qty', $cartData['quantity']);
            }

        } catch (Exception $e) {
            return response($e->getMessage(), 400);
        }
    }
}

Примечание. Я протестировал dd все данные, которые я поместил в столбец order, и все они получают истинные значения.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 11 июля 2020

Думаю, проблема здесь:

$ order-> order_data = $ cartData;

$cartData - это массив, и его нельзя сохранить в базе данных напрямую .

Вот почему вы получили ошибку преобразования массива в строку.

0 голосов
/ 11 июля 2020

это потому, что вы пытаетесь сохранить массив в виде строки в базе данных, чтобы сохранить массив в базе данных, у вас есть:

  1. $data_to_store=json_encode($array) затем при обратном вызове $array=json_decode($db_data)
  2. $data_to_store=serialize($array) затем при обратном вызове $array=unserialize($db_data)
  3. $data_to_store= implode('!!', $array) затем при обратном вызове $array = explode('!!', $db_data)

проверьте также этот удивительный ответ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...