J'ai une méthode stockée dans mon contrôleur et renvoie ces erreurs:
console onglet Aperçu code> p>
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);
}
}
}
3 Réponses :
Je pense que le problème est ici: p>
$ order-> order_data = $ cartdata; p> blockQuote>
$ cartdata code> est une matrice et ne peut pas être enregistré directement dans la base de données. P>
C'est pourquoi vous avez une arrayage à une erreur de conversion de chaîne. P>
Exactement, je viens de résoudre celui-ci avec json_encode ($ carthata); code> merci
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: P>
$ data_to_store = json_code ($ array) code> puis lorsque le rappel $ array = json_decode ($ db_data) code> li> li>
-
$ data_to_store = Serialize ($ array) code> alors lorsque le rappel $ array = non désériorize ($ db_data) code> li> li>
-
$ data_to_store = implorez ("!", $ array) code> alors lorsque le rappel $ array = exploser ("!! ', $ db_data) code> li> li>
ol>
Vérifiez également cet incroyable Réponse p>
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'
];
}