0
votes

Array de retour Laravel à une erreur de conversion à chaîne

J'ai une méthode stockée dans mon contrôleur et renvoie ces erreurs:

erreurs h1>

console onglet Aperçu code> p> xxx pré> Console Onglet Réponse Code> P>

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


0 commentaires

3 Réponses :


2
votes

Je pense que le problème est ici:

$ order-> order_data = $ cartdata;

$ cartdata est une matrice et ne peut pas être enregistré directement dans la base de données.

C'est pourquoi vous avez une arrayage à une erreur de conversion de chaîne.


1 commentaires

Exactement, je viens de résoudre celui-ci avec json_encode ($ carthata); merci



0
votes

Ceci parce que vous essayez de stocker un tableau comme une chaîne dans la base de données, pour stocker le tableau dans la base de données que vous avez soit:

  1. $ data_to_store = json_code ($ array) puis lorsque le rappel $ array = json_decode ($ db_data)
  2. $ data_to_store = Serialize ($ array) alors lorsque le rappel $ array = non désériorize ($ db_data)
  3. $ data_to_store = implorez ("!", $ array) alors lorsque le rappel $ array = exploser ("!! ', $ db_data)

    Vérifiez également cet incroyable Réponse


0 commentaires

0
votes

Je cherchais la même solution et cela a fonctionné pour moi. En supposant que votre colonne order_data ​​code> sur le modèle de commande est de type JSON. Définissez la propriété CastSs dans votre Commandez Code> Modèle avec Commande_Data ​​Code> en tant que tableau. Vous n'aurez pas besoin de json_encode si vous l'utilisez de cette façon, car Laravel convertira le tableau en Json pour vous.

class Order extends Model
{
    protected $casts = [
        'order_data' => 'array'
    ];
}


0 commentaires