Estoy tratando de crear un carrito de compras y quiero PUBLICAR múltiples campos con el mismo nombre y procesarlos
<?php foreach($datacart as $datacart) { ?>
<form method="post" action="/update-cart">
<input type="hidden" name="rowid" value="{{$datacart->rowid}}">
<input type="text" name="quantity" value="{{$datacart->quantity}}">
<?php }>
<input type="submit" value="update">
</form>
public function update_cart(request $request){
$rowId = $request->rowid;
$quantity = $request->quantity;
Cart::update($rowId, $quantity);
}
Primero muestra todos los productos usando un foreach. Entonces cada artículo tiene un rowid oculto y una cantidad.
El siguiente código muestra mi controlador. Pero con este código, solo actualiza un elemento (último). Pero quiero actualizar la cantidad de cada producto por separado
Olvidé mencionar que uso https://github.com/Crinsane/LaravelShoppingcart como complemento de mi carrito
4 respuestas
Gracias a todos. Este código funcionó para mí. yo solía bucle con un índice
<input type="hidden" name="rowid[]" value="{{$datacart->rowid}}">
<input type="text" name="quantity[]" value="{{$datacart->quantity}}">
,
for ($i = 0; $i < count($request->input('rowid')); $i++){
Cart::update($request->rowid[$i], $request->quantity[$i]);
}
Debe agregar []
después del nombre
<input type="hidden" name="rowid[]" value="{{$datacart->rowid}}">
<input type="text" name="quantity[]" value="{{$datacart->quantity}}">
Luego en su método de controlador
public function update_cart(Request $request) {
for ($i = 0; $i < count($request->input('rowid')); $i++) {
$cart = Cart::find($request->input('rowid')[$i];
$cart->quantity = $request->input('quantity')[$i];
}
}
Entonces, lo que debe hacer es definir en el marcado html que la entrada es una matriz como esta:
es decir usando corchetes []
al lado del nombre de los elementos de entrada
<?php foreach($datacart as $datacart) { ?>
<form method="post" action="/update-cart">
<input type="hidden" name="rowid[]" value="{{$datacart->rowid}}">
<input type="text" name="quantity[]" value="{{$datacart->quantity}}">
<?php }>
<input type="submit" value="update">
</form>
Y luego, cuando maneja la solicitud en el método del controlador, debe procesarla así:
public function update_cart(request $request) {
foreach ($request->rowid as $index => $rowid) {
$quantity = $request->quantity[$index];
Cart::where('id', $rowId)
->update([
'quantity' => $quantity
]);
}
}
Primero, vamos a mejorar su archivo Blade, puede usar la sintaxis de Blade en lugar de PHP, así que aquí:
<form method="post" action="/update-cart">
@csrf
@foreach($datacart as $datacart)
<input type="hidden" name="rowid[]" value="{{$datacart->rowid}}">
<input type="text" name="quantity[]" value="{{$datacart->quantity}}">
@endforeach
<input type="submit" value="update">
</form>
Observe que los atributos de nombre de los elementos de entrada ahora aceptan múltiples valores como una matriz. Luego, para procesarlo en su controlador, puede hacer lo siguiente:
public function update_cart(Request $request) {
foreach ( $request->rowid as $index => $id ) {
Cart::find($id)->update(['quantity' => $request->quantity[$index]]);
}
}
-- EDITAR
Acabo de probar llamando al update
en el modelo ya que el método estático no funcionará.
Preguntas relacionadas
Nuevas preguntas
php
PHP es un lenguaje de secuencias de comandos interpretado, dinámico, orientado a objetos y ampliamente utilizado, diseñado principalmente para el desarrollo web del lado del servidor. Se utiliza para preguntas sobre el lenguaje PHP.