Creé un carrito de compras... Donde traté de actualizar la base de datos usando ajax... cuando actualice la cantidad, reflejará la base de datos inmediatamente...
para eso usé la siguiente Vista:
@foreach($carts as $row) <input type="hidden" class="cat_id" value="{{$row->id}}"/> <input type="number" class="quantity" value="{{$row->no_of_items}}" name="qty" maxlength="3" max="999" min="1" /> ×${{$row->p_price}} @endforeachAquí está la parte de Ajax:
$(".quantity").change(updateCart); function updateCart(){ var qty = parseInt($(this).val()); var cat_id = parseInt($('.cat_id').val()); console.log(cat_id); $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } }); $.ajax({ url:"{{url('cart/update/{cat_id}/{qty}')}}", method:"POST", data:{cat_id:cat_id, qty:qty}, success: function( data ) { // console.log(data); } }); }Ruta
Route::post('cart/update/{cat_id}/{qty}','ProductController@cartUpdate');
Y la parte del controlador:
public function cartUpdate($cat_id, $qty) { $cart = Cart::find($cat_id); $product = Product::find($cart->product_id); $cart->no_of_items = Input::get('qty'); $cart->price = $product->price * $cart->no_of_items; $cart->save(); }Tengo product_id en la tabla de carritos. El problema al que me enfrento es cada vez que intento actualizar la cantidad que veo en el modo de consola:
ErrorException en ProductController.php Intentando obtener la propiedad de un no objeto
cuando dd () el cat_id veo un valor nulo o el mismo para todo el curt ... ¿cuál podría ser el posible? Gracias
El problema es que no está pasando cat_id y qty a través de la URL y se pasa a través de una solicitud de publicación de ajax
$.ajax({
url:"{{url('carrito/actualizar/ {cat_id} / {cantidad} ')}}",
método: "POST",
datos:{
id_gato : id_gato,
cantidad: cantidad
},
éxito: función (datos) {
// consola.log(datos);
}
});
por lo tanto, $cat_id y $qty son null en el controlador, por lo que debe cambiar el código en su controlador como
función pública cartUpdate($cat_id, $qty)
{
$carrito = Carrito::find( Input::get('cat_id') );
$producto = Producto::find($carrito->product_id);
$carrito->no_of_items = Entrada::get('cantidad');
$carrito->precio = $producto->precio * $carrito->no_de_artículos;
$carrito->guardar();
}
Prueba de esta manera:
@foreach($carts as $row) <input type="hidden" class="cat_id" name="cat_id" value="{{$row->id}}"/> <!--Add name="cat_id" AS Attribute --> <input type="number" class="quantity{{$row->id}}" value="{{$row->no_of_items}}" name="qty" maxlength="3" max="999" min="1" /> ×${{$row->p_price}} @endforeachY parte del Ajax:
@foreach($carts as $row) $(".quantity{{$row->id}}").change(updateCart); @endforeach function updateCart(){ var qty = parseInt($(this).val()); var cat_id = parseInt($('.cat_id').val()); console.log(cat_id); $.ajax({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, url:'cart/update', method:"POST", data:{ cat_id:cat_id, qty:qty }, success: function( data ) { // console.log(data); } }); }