Ayuda con un insert en laravel

  • Autor Autor pa3lo022
  • Fecha de inicio Fecha de inicio
P

pa3lo022

Gamma
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Hola a todos, me podrian por favor ayudar con un insert, me estoy volviendo loco 🙁
El problema que tengo es que envio varios arrays y tengo que hacer un insert pero no encuentro la forma correcta de hacerlo, les paso los datos que envio.

Insertar CODE, HTML o PHP:
array:12 [▼
  "_token" => "SZoiXYi1R7d2ybWRvStVyoOIoV2eUfcTM037mENA"
  "customer_id" => "6"
  "stock_id" => array:1 [▼
    0 => "185"
  ]
  "description" => array:1 [▼
    0 => "ed"
  ]
  "qty" => array:1 [▼
    0 => "32"
  ]
  "price" => array:1 [▼
    0 => "32"
  ]
  "discount" => array:1 [▼
    0 => "32"
  ]
  "total" => array:1 [▼
    0 => "992"
  ]
  "sub_total" => "992.00"
  "tax" => null
  "tax_amount" => "0.00"
  "total_amount" => "992.00"
]


muchas gracias
 
Por que estos estan en array
"stock_id" => array:1 [▼
0 => "185"
]
"description" => array:1 [▼
0 => "ed"
]
"qty" => array:1 [▼
0 => "32"
]
"price" => array:1 [▼
0 => "32"
]
"discount" => array:1 [▼
0 => "32"
]
"total" => array:1 [▼
0 => "992"
]
y no en valor directo: "total => '992'
Seria mas facil !
 
Por que estos estan en array
"stock_id" => array:1 [▼
0 => "185"
]
"description" => array:1 [▼
0 => "ed"
]
"qty" => array:1 [▼
0 => "32"
]
"price" => array:1 [▼
0 => "32"
]
"discount" => array:1 [▼
0 => "32"
]
"total" => array:1 [▼
0 => "992"
]
y no en valor directo: "total => '992'
Seria mas facil !
Como estas? perdon pero no entiendo la pregunta que me haces, los datos los paso asi, porque es un recibo en el que podes tener N lineas, es decir, podes tener N productos->stock_id, N cantidad->qty, N price y esto puede variar, podes tener N como podes tener 1 solo elemento, por eso va en un array.
 
Te complicas demasiado la vida bro, si tienes varios productos envialos en un array y dentro otro array con los datos del producto, ejemplo:
Insertar CODE, HTML o PHP:
array:12 [▼

  "_token" => "SZoiXYi1R7d2ybWRvStVyoOIoV2eUfcTM037mENA"

  "customer_id" => "6"

  "products" => array:1 [▼

    0 => array:1 [▼

        "stock_id" => "185"
        "description" => "ed"
        "qty" => "32"
        "price" => "32"
        "discount" => "32"
        "total" => "992"
      ]

  ]

  "sub_total" => "992.00"
  "tax" => null
  "tax_amount" => "0.00"
  "total_amount" => "992.00"

]
 
Te complicas demasiado la vida bro, si tienes varios productos envialos en un array y dentro otro array con los datos del producto, ejemplo:
Insertar CODE, HTML o PHP:
array:12 [▼

  "_token" => "SZoiXYi1R7d2ybWRvStVyoOIoV2eUfcTM037mENA"

  "customer_id" => "6"

  "products" => array:1 [▼

    0 => array:1 [▼

        "stock_id" => "185"
        "description" => "ed"
        "qty" => "32"
        "price" => "32"
        "discount" => "32"
        "total" => "992"
      ]

  ]

  "sub_total" => "992.00"
  "tax" => null
  "tax_amount" => "0.00"
  "total_amount" => "992.00"

]

Te voy a hacer una pregunta media estupida, como hago eso?? tengo el formulario en el front, en donde envio los datos y termina enviandolos como te mostre
 
Te voy a hacer una pregunta media estupida, como hago eso?? tengo el formulario en el front, en donde envio los datos y termina enviandolos como te mostre
A ver el código del formulario ?
 
Insertar CODE, HTML o PHP:
<input type="text" name="products[1][stock_id]" value="12">
<input type="text" name="products[1][descripcion]" value="hola mundo">
<input type="text" name="products[1][total]" value="999">

Para otro producto ps cambias el 1:


<input type="text" name="products[2][stock_id]" value="12">
<input type="text" name="products[2][descripcion]" value="hola mundo">
<input type="text" name="products[2][total]" value="999">
De esta forma se crear el array en productos, y dentro tendría 2 valores, y esos valores serían array y dentro tendrían los campos stock_id, descripción y total(los que usted quiera agregar).
 
A ver el código del formulario ?

Te paso el codigo del form

Insertar CODE, HTML o PHP:
<form method="post" action="{{ route('addNew.sale') }}">
                        @csrf
                        <div class="row clearfix">
                            <div class="col-md-12">

                                <div class="col-md-6 col-md-offset-0">
                                    <div class="form-group">
                                        <select class="bootstrap-select" name="customer_id" data-live-search="true"
                                                data-width="100%">
                                            <option value="">Elija el Cliente</option>
                                            @foreach($customers as $customer)
                                                <option value="{{ $customer->id }}">{{ $customer->name }}</option>
                                            @endforeach
                                        </select>
                                    </div>
                                </div>

                                <h4>Recibo # {{ $invoiceNumber->invoice }}</h4>

                                <table class="table table-bordered table-hover" id="tab_logic" style="font-size: 12px;">
                                    <thead>
                                    <tr>
                                        <th class="text-center"> #</th>
                                        <th class="text-center"> Producto</th>
                                        <th class="text-center"> Descripción</th>
                                        <th class="text-center"> Cantidad</th>
                                        <th class="text-center"> Precio</th>
                                        <th class="text-center"> Descuento</th>
                                        <th class="text-center"> Total</th>
                                    </tr>
                                    </thead>
                                    <tbody>
                                    <tr id='addr0'>
                                        <td>1</td>
                                        <td>
                                            <select name="stock_id[]">
                                                <option value="">Elija el Producto</option>
                                                @foreach($stocks as $stock)
                                                    <option value="{{ $stock->id }}">{{ $stock->name }}</option>
                                                @endforeach
                                            </select>
                                        </td>
                                        <td><input type="text" name='description[]'
                                                   class="form-control description" step="0" min="0"/></td>
                                        <td><input type="number" name='qty[]' required
                                                   class="form-control qty" step="0" min="0"/></td>
                                        <td><input type="number" name='price[]' required
                                                   class="form-control price" step="0.00" min="0"/></td>
                                        <td><input type="number" name='discount[]'
                                                   class="form-control discount"/></td>
                                        <td><input type="number" name='total[]' required
                                                   class="form-control total" readonly/></td>
                                    </tr>
                                    <tr id='addr1'></tr>
                                    </tbody>
                                </table>
                            </div>
                        </div>
                        <div class="row clearfix" style="margin-top:20px">
                            <div class="pull-right col-md-4">
                                <table class="table table-bordered table-hover" id="tab_logic_total"
                                       style="font-size: 12px;">
                                    <tbody>
                                    <tr>
                                        <th class="text-center">Sub Total</th>
                                        <td class="text-center"><input type="number" name='sub_total' placeholder='0.00'
                                                                       class="form-control" id="sub_total" readonly/>
                                        </td>
                                    </tr>
                                    <tr>
                                        <th class="text-center">Impuesto</th>
                                        <td class="text-center">
                                            <div class="input-group mb-2 mb-sm-0">
                                                <input type="number" class="form-control" name="tax" id="tax" placeholder="0">
                                                <div class="input-group-addon">%</div>
                                            </div>
                                        </td>
                                    </tr>
                                    <tr>
                                        <th class="text-center">Impuesto $</th>
                                        <td class="text-center"><input type="number" name='tax_amount' id="tax_amount"
                                                                       placeholder='0.00' class="form-control"
                                                                       readonly/>
                                        </td>
                                    </tr>
                                    <tr>
                                        <th class="text-center">Total</th>
                                        <td class="text-center"><input type="number" name='total_amount'
                                                                       id="total_amount"
                                                                       placeholder='0.00' class="form-control"
                                                                       readonly/>
                                        </td>
                                    </tr>
                                    </tbody>
                                </table>
                            </div>
                        </div>
                        <button type="submit" class="btn btn-primary legitRipple" style="margin: 20px 43px 20px 35px;">
                            Generar Recibo
                        </button>
                    </form>
 
Insertar CODE, HTML o PHP:
<tr id='addr0'>
<td>1</td>
<td>
<select name="products[addr0][stock_id]">
<option value="">Elija el Producto</option>
@foreach($stocks as $stock)
<option value="{{ $stock->id }}">{{ $stock->name }}</option>
@endforeach
</select>
</td>
<td><input type="text" name='products[addr0][description]'
class="form-control description" step="0" min="0"/></td>
<td><input type="number" name='products[addr0][qty]' required
class="form-control qty" step="0" min="0"/></td>
<td><input type="number" name='products[addr0][price]' required
class="form-control price" step="0.00" min="0"/></td>
<td><input type="number" name='products[addr0][discount]'
class="form-control discount"/></td>
<td><input type="number" name='products[addr0][total]' required
class="form-control total" readonly/></td>
</tr>
Creo yo que quedaria bien asi, defines esos datos al id: addr0,addr1,addr2,addr3
 
Insertar CODE, HTML o PHP:
<tr id='addr0'>
<td>1</td>
<td>
<select name="products[addr0][stock_id]">
<option value="">Elija el Producto</option>
@foreach($stocks as $stock)
<option value="{{ $stock->id }}">{{ $stock->name }}</option>
@endforeach
</select>
</td>
<td><input type="text" name='products[addr0][description]'
class="form-control description" step="0" min="0"/></td>
<td><input type="number" name='products[addr0][qty]' required
class="form-control qty" step="0" min="0"/></td>
<td><input type="number" name='products[addr0][price]' required
class="form-control price" step="0.00" min="0"/></td>
<td><input type="number" name='products[addr0][discount]'
class="form-control discount"/></td>
<td><input type="number" name='products[addr0][total]' required
class="form-control total" readonly/></td>
</tr>
Creo yo que quedaria bien asi, defines esos datos al id: addr0,addr1,addr2,addr3
Ahi lo hice como vos decis y si efectivamente lo mete todo dentro de un solo array, el problema es cuando hay mas de 2 productos. Si pongo 2 productos me trae solo el 2do.

Insertar CODE, HTML o PHP:
array:7 [▼
  "_token" => "m1oIaoYThOZ4lSQwe2677nt0sNoEHXlcNEcLkO4B"
  "customer_id" => "2"
  "products" => array:6 [▼
    "addr0" => array:1 [▼
      "stock_id" => "153"
    ]
    "addr1" => array:1 [▼
      "description" => "producto 2"
    ]
    "addr2" => array:1 [▼
      "qty" => "2"
    ]
    "addr3" => array:1 [▼
      "price" => "2"
    ]
    "addr4" => array:1 [▼
      "discount" => "2"
    ]
    "addr5" => array:1 [▼
      "total" => "2"
    ]
  ]
  "sub_total" => "2.00"
  "tax" => null
  "tax_amount" => "0.00"
  "total_amount" => "2.00"
]
 
Lo sigues haciendo mal bro... :S
En el select Elija el Producto, es select normal o multiple, si es multiple la cosa se hace mas compleja D: !
O a que te refieres cuando elije dos productos ?
 
Lo sigues haciendo mal bro... :S
En el select Elija el Producto, es select normal o multiple, si es multiple la cosa se hace mas compleja D: !
O a que te refieres cuando elije dos productos ?
El select no es multiple.
Te paso un screen de la pantalla.

1589313318892.webp

Podes agregar todas las filas que sean necesarias, el select de producto te trae todos los productos y despues tenes los campos de precio, descuento, cant, etc
 
Insertar CODE, HTML o PHP:
<tr id='addr0'>
<td>1</td>
<td>
<select name="products[addr0][stock_id]">
<option value="">Elija el Producto</option>
@foreach($stocks as $stock)
<option value="{{ $stock->id }}">{{ $stock->name }}</option>
@endforeach
</select>
</td>
<td><input type="text" name='products[addr0][description]'
class="form-control description" step="0" min="0"/></td>
<td><input type="number" name='products[addr0][qty]' required
class="form-control qty" step="0" min="0"/></td>
<td><input type="number" name='products[addr0][price]' required
class="form-control price" step="0.00" min="0"/></td>
<td><input type="number" name='products[addr0][discount]'
class="form-control discount"/></td>
<td><input type="number" name='products[addr0][total]' required
class="form-control total" readonly/></td>
</tr>
Este es el codigo amigo para 1 fila, debes modificar solo lo de "addr0", para la otra fila, ejemplo quedando asi la segunda fila:
Insertar CODE, HTML o PHP:
<tr id='addr1'>
<td>2</td>
<td>
<select name="products[addr1][stock_id]">
<option value="">Elija el Producto</option>
@foreach($stocks as $stock)
<option value="{{ $stock->id }}">{{ $stock->name }}</option>
@endforeach
</select>
</td>
<td><input type="text" name='products[addr1][description]'
class="form-control description" step="0" min="0"/></td>
<td><input type="number" name='products[addr1][qty]' required
class="form-control qty" step="0" min="0"/></td>
<td><input type="number" name='products[addr1][price]' required
class="form-control price" step="0.00" min="0"/></td>
<td><input type="number" name='products[addr1][discount]'
class="form-control discount"/></td>
<td><input type="number" name='products[addr1][total]' required
class="form-control total" readonly/></td>
</tr>
 
Insertar CODE, HTML o PHP:
<tr id='addr0'>
<td>1</td>
<td>
<select name="products[addr0][stock_id]">
<option value="">Elija el Producto</option>
@foreach($stocks as $stock)
<option value="{{ $stock->id }}">{{ $stock->name }}</option>
@endforeach
</select>
</td>
<td><input type="text" name='products[addr0][description]'
class="form-control description" step="0" min="0"/></td>
<td><input type="number" name='products[addr0][qty]' required
class="form-control qty" step="0" min="0"/></td>
<td><input type="number" name='products[addr0][price]' required
class="form-control price" step="0.00" min="0"/></td>
<td><input type="number" name='products[addr0][discount]'
class="form-control discount"/></td>
<td><input type="number" name='products[addr0][total]' required
class="form-control total" readonly/></td>
</tr>
Este es el codigo amigo para 1 fila, debes modificar solo lo de "addr0", para la otra fila, ejemplo quedando asi la segunda fila:
Insertar CODE, HTML o PHP:
<tr id='addr1'>
<td>2</td>
<td>
<select name="products[addr1][stock_id]">
<option value="">Elija el Producto</option>
@foreach($stocks as $stock)
<option value="{{ $stock->id }}">{{ $stock->name }}</option>
@endforeach
</select>
</td>
<td><input type="text" name='products[addr1][description]'
class="form-control description" step="0" min="0"/></td>
<td><input type="number" name='products[addr1][qty]' required
class="form-control qty" step="0" min="0"/></td>
<td><input type="number" name='products[addr1][price]' required
class="form-control price" step="0.00" min="0"/></td>
<td><input type="number" name='products[addr1][discount]'
class="form-control discount"/></td>
<td><input type="number" name='products[addr1][total]' required
class="form-control total" readonly/></td>
</tr>
Ahh ok, ahora entiendo
muchas gracias
 
Ahh ok, ahora entiendo
muchas gracias
Ya te funciono?

La manera ideal para hacerlo es usando el siguiente array:

PHP:
array:12 [▼
 $products = "product" => [
      "_token" => "SZoiXYi1R7d2ybWRvStVyoOIoV2eUfcTM037mENA"
      "customer_id" => "6"
      "stock_id" => "185"
      "description" => "ed"
      "qty" => "32"
      "price" => "32"
      "discount" => "32"
      "total" => "992"
      "sub_total" => "992.00"
      "tax" => null
      "tax_amount" => "0.00"
      "total_amount" => "992.00" 
  ]
]

Y para insertarlo en laravel, utilizas:
Insertar CODE, HTML o PHP:
<?php
ModelName::insert($products);
?>
 
Ya te funciono?

La manera ideal para hacerlo es usando el siguiente array:

PHP:
array:12 [▼
$products = "product" => [
      "_token" => "SZoiXYi1R7d2ybWRvStVyoOIoV2eUfcTM037mENA"
      "customer_id" => "6"
      "stock_id" => "185"
      "description" => "ed"
      "qty" => "32"
      "price" => "32"
      "discount" => "32"
      "total" => "992"
      "sub_total" => "992.00"
      "tax" => null
      "tax_amount" => "0.00"
      "total_amount" => "992.00"
  ]
]

Y para insertarlo en laravel, utilizas:

No todavia no funcio por el echo de que estoy viendo como generar el ddr<Num> dinamico 🙁
 
No es obligatorio poner el formulario como te ha indicado el usuario anterior, puedes dejarlo como lo tenias y despues crear una función que transforme el array
Insertar CODE, HTML o PHP:
array:12 [▼
  "_token" => "SZoiXYi1R7d2ybWRvStVyoOIoV2eUfcTM037mENA"
  "customer_id" => "6"
  "stock_id" => array:1 [▼
    0 => "185"
  ]
  "description" => array:1 [▼
    0 => "ed"
  ]
  "qty" => array:1 [▼
    0 => "32"
  ]
  "price" => array:1 [▼
    0 => "32"
  ]
  "discount" => array:1 [▼
    0 => "32"
  ]
  "total" => array:1 [▼
    0 => "992"
  ]
  "sub_total" => "992.00"
  "tax" => null
  "tax_amount" => "0.00"
  "total_amount" => "992.00"
]

en
Insertar CODE, HTML o PHP:
       array:12 [▼
$products = "product" => [
"_token" => "SZoiXYi1R7d2ybWRvStVyoOIoV2eUfcTM037mENA"
"customer_id" => "6"
"stock_id" => "185"
"description" => "ed"
"qty" => "32"
"price" => "32"
"discount" => "32"
"total" => "992"
"sub_total" => "992.00"
"tax" => null
"tax_amount" => "0.00"
"total_amount" => "992.00"
]
]

¿Cómo? Inicilizando una variable vacia, por ejemplo, $res = [], recorriendo tu primer array e insertando esos datos en la variable res.
 
Logre llegar a esto 🙂

Insertar CODE, HTML o PHP:
array:18 [▼
  "_token" => "m1oIaoYThOZ4lSQwe2677nt0sNoEHXlcNEcLkO4B"
  "customer_id" => "7"
  "stock_id.0" => "9"
  "stock_id.1" => "21"
  "description.0" => "1"
  "description.1" => "2"
  "qty.0" => "1"
  "qty.1" => "2"
  "price.0" => "1"
  "price.1" => "2"
  "discount.0" => "1"
  "discount.1" => "2"
  "total.0" => "0"
  "total.1" => "2"
  "sub_total" => "2.00"
  "tax" => null
  "tax_amount" => "0.00"
  "total_amount" => "2.00"
]

Son 2 filas y tiene por ejemplo stock_id.0 y .1 que representan las 2 fijas que agregue en el front
 
Logre llegar a esto 🙂

Insertar CODE, HTML o PHP:
array:18 [▼
  "_token" => "m1oIaoYThOZ4lSQwe2677nt0sNoEHXlcNEcLkO4B"
  "customer_id" => "7"
  "stock_id.0" => "9"
  "stock_id.1" => "21"
  "description.0" => "1"
  "description.1" => "2"
  "qty.0" => "1"
  "qty.1" => "2"
  "price.0" => "1"
  "price.1" => "2"
  "discount.0" => "1"
  "discount.1" => "2"
  "total.0" => "0"
  "total.1" => "2"
  "sub_total" => "2.00"
  "tax" => null
  "tax_amount" => "0.00"
  "total_amount" => "2.00"
]

Son 2 filas y tiene por ejemplo stock_id.0 y .1 que representan las 2 fijas que agregue en el front
Amigo el array debe quedarte asi:


Insertar CODE, HTML o PHP:
array:12 [▼

  "_token" => "SZoiXYi1R7d2ybWRvStVyoOIoV2eUfcTM037mENA"

  "customer_id" => "6"

  "products" => array:1 [▼

    "addr0" => array:1 [▼

        "stock_id" => "185"
        "description" => "ed"
        "qty" => "32"
        "price" => "32"
        "discount" => "32"
        "total" => "992"
      ]

  ]

  "sub_total" => "992.00"
  "tax" => null
  "tax_amount" => "0.00"
  "total_amount" => "992.00"

]
 
Tienes que generar un array con dos productos. No uno en el que juntes los dos.
 
Atrás
Arriba