2017-10-18 4 views
0

J'ai des problèmes pour ajouter un champ dynamique dans la base de données, Si je retourne toutes les valeurs je reçois des valeurs mais si j'essaie d'ajouter dans la base de données, je reçois erreur 500. ceci est mon champ dynamique:Comment ajouter un champ dynamique dans DB Lavavel

var i = 1; 
    $('#add_field').click(function(){ 
    i++; 
    $('#dynamic_field').append('<tr id="row'+i+'"><td class="col-md-5"><textarea class="name borders table-control" type="text" rows="1" cols="45" name="name[]"></textarea></td><td class="col-md-2"><input class="borders table-control price" type="text" name="price[]"></td><td class="col-md-2"><input class="borders table-control qty" type="text" name="qty[]"></td><td class="col-md-2"><input class="form-control total" type="text" name="total[]"></td><td class="text-center"><span id="'+i+'" style="color: red" name="remove" class="btn_remove"><i class="fa fa-times" aria-hidden="true"></i></span></td></tr>'); 

}); 

Ceci est mon appel Ajax:

$(document).on('change','.qty',function(){ 


    var id = $("#inv_id").val(); 
    var tr = $(this).closest('tr'); 
    var name = tr.find(".name").val(); 
    var price = tr.find(".price").val(); 
    var qty = tr.find(".qty").val(); 
    var total = tr.find(".total").val(); 

    $.ajax({ 
     type: "POST", 
     url: '/product', 
     data: {'id': id, 'name': name, 'price': price, 'qty': qty, 'total': total, '_token':$('input[name=_token]').val()}, 
     success: function(data) { 

      console.log(data); 

     }, 
      error: function(data){ 
      alert("fail"); 

      } 
    }); 
}); 

Et voici mon contrôleur:

public function product(Request $request){ 

    $products = $request->all(); 

     $id = $products['id']; 
     $name = $products['name']; 
     $price = $products['price']; 
     $qty = $products['qty']; 
     $total = $products['total']; 

    for($i = 0; $i < count($name); $i++) { 


      $prod = new Product(); 
      $prod->invoice_id = $id; 
      $prod->name = $name[$i]; 
      $prod->price = $price[$i]; 
      $prod->qty = $qty[$i]; 
      $prod->total = $total[$i]; 
      $prod->save(); 

    } 


    return response()->json($prod->toArray(), 200); 

} 

c'est mon modèle de produit

protected $fillable = [ 'invoice_id', 'name', 'qty', 'price', 'total' ]; 

I J'ai essayé Product :: create ($ request-> all), en fait j'ai essayé tout ce que je sais. C'est pourquoi j'ai besoin de vous aider les gars.

+0

Laissez-nous [continuer cette discussion dans le chat] (http://chat.stackoverflow.com/rooms/157032/discussion-between-ljubadr-and-denisson-de-souza). – ljubadr

+0

@ljubadr, j'ai finalement réussi à corriger le code. Mon code était correct, tout ce que j'avais à faire était de rafraîchir la page. si simple mais m'a pris longtemps. Eh bien j'apprends. affichera ici le code. –

Répondre

0

tout ce que j'avais à faire était de rafraîchir la page.

public function product(Request $request){ 
$prod = new Product(); 
$prod->invoice_id = $request->id; 
$prod->name = $request->name; 
$prod->price = $request->price; 
$prod->qty = $request->qty; 
$prod->total = $request->total; 
$prod->save(); 
return response()->json($prod->toArray(), 200); 
} 

$(document).on('change','.qty',function(){ 

    var name = []; 
    var price = []; 
    var qty = []; 
    var total = []; 


    var id = $("#inv_id").val(); 
    var tr = $(this).closest('tr'); 
    name = tr.find(".name").val(); 
    price = tr.find(".price").val(); 
    qty = tr.find(".qty").val(); 
    total = tr.find(".total").val(); 


    $.ajax({ 
     type: "POST", 
     url: '/product', 
     data: {id: id, name: name, price: price, qty: qty, total: total, '_token':$('meta[name="csrf-token"]').attr('content')}, 
     success: function(data) { 
      $('#form').load(location.href + ' #form'); 
      location.reload(); 
     } 

    }); 
});