David Ramirez
David Ramirez
Laravel
Comparte:

Agragar Campos en array y guardar en DB

Hola buenas tardes,
Tengo este codigo:
<div class="form-group" >
        @foreach($apoyo->productos as $producto)
        <div class="row">
          <div class="col-md-4">
            <div class="form-group">
              <label for="cantidad">Cantidad</label>
              <input type="number" class="form-control" id="cantidad" placeholder="" name="productos[{{$producto->id}}][cantidad]" value="{{$producto->cantidad}}">
            </div>
          </div>


          <div class="col-md-4">
            <div class="form-group">
              <label for="unidad">unidad</label>
              <input type="text" class="form-control" id="unidad" placeholder="" name="productos[{{$producto->id}}][unidad]" value="{{$producto->unidad}}">
            </div>
          </div>

          <div class="col-md-4">
            <div class="form-group">
              <label for="Concepto">Concepto</label>
              <input type="text" class="form-control" id="concepto" placeholder="" name="productos[{{$producto->id}}][concepto]" value="{{$producto->concepto}}">
            </div>
          </div>
        </div>
        @endforeach

        <div id="products" ></div>
        <div class="row">
          <a href="javascript:;" id="add-new-product" class="btn btn-primary">Nuevo producto</a>
        </div>
      </div>  

En el jquery
<script>
let i = 1;
document.getElementById('add-new-product').onclick = function () {
    let template = `
    <div class="row">
    <div class="col-md-4">
      <div class="form-group">
         <label for="cantidad">Cantidad</label>
         <input type="text" class="form-control" id="cantidad" placeholder="" name="productos[${i}][cantidad]">
      </div>
    </div>
    
    <div class="col-md-4">
       <div class="form-group">
           <label for="unidad">unidad</label>
          <input type="text" class="form-control" id="unidad" placeholder="" name="productos[${i}][unidad]">
       </div>
     </div>

       <div class="col-md-4">
         <div class="form-group">
             <label for="Concepto">Concepto</label>
             <input type="text" class="form-control" id="concepto" placeholder="" name="productos[${i}][concepto]">
         </div>
       </div>
     </div>
    </div>
    `;

    let container = document.getElementById('products');
    let div = document.createElement('div');
    div.innerHTML = template;
    container.appendChild(div);

    i++;
}
</script>

En mi modelo parte update agregue 
$productos = [];
        $count = count($request->get('productos'));

        for($a =0 ; $a < $count ; $a++ ) {
          foreach ($request->get('productos') as $id => $value) {
            $productos[] =  Producto::find($id)
                            ? $id
                            : Producto::create($request->get('productos')[$a])->id; 
          }

        } 

        $apoyo->productos()->sync($productos);

me aparece error Undefined offset: 0
como se darán cuenta al editar un ítem me edita el numero 1 y así cada que aumente 1 item de mas.
De momento no se ni en donde empieza el problema o termina.
Agradezco su colaboración.
Franco Micalizzi
Franco Micalizzi (984 xp)
Hola David, en una revisión rápida te sugiero que trabajes con los modelos de eloquent, a nivel más genérico, veo que estás siendo muy específico sobre que campos traes y cuales quieres agregar.

Creo que eso te esta generando un problema al tratar de manejar los modelos.
Laravel tiene una serie de herramientas que te ayudan mucho con eso. Lo ideal es que tu controlador maneje los métodos de cada CRUD y tomando la estructura del objeto que definiste en tu modelo.  Intenta revisar el curso gratis de Laravel desde 0 cuando, creo que te ayudará a estructurar mejor las operaciones.