POST несколько полей с одинаковым именем в Laravel - PullRequest
0 голосов
/ 11 мая 2019

Я пытаюсь создать корзину покупок, и я хочу POST множители полей с одинаковыми именами и обработать их

<?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);

}

Сначала отображаются все продукты с использованием foreach.Тогда у каждого элемента есть скрытый rowid и количество.

Ниже код показывает мой контроллер.Но с этим кодом он обновляет только один элемент (lastone).Но я хочу обновить количество каждого продукта отдельно

Забыл упомянуть, я использую https://github.com/Crinsane/LaravelShoppingcart в качестве плагина моей корзины

Ответы [ 4 ]

1 голос
/ 11 мая 2019

Прежде всего давайте улучшим ваш блейд-файл, вы можете использовать блейд-синтаксис вместо PHP, поэтому здесь:

<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>

, поэтому обратите внимание, что атрибуты имени входных элементов теперь принимают несколько значений в виде массива. Затем, чтобы обработать его в вашем контроллере, вы можете сделать следующее:

public function update_cart(Request $request) {

    foreach ( $request->rowid as $index => $id ) {
       Cart::find($id)->update(['quantity' => $request->quantity[$index]]);
    }

}

- РЕДАКТИРОВАТЬ

Только что протестировал вызов update на модели, так как статический метод не будет работать.

0 голосов
/ 11 мая 2019

спасибо всем. этот код работал для меня. я использовал для цикла с индексом

<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]);

        }
0 голосов
/ 11 мая 2019

Вам необходимо добавить [] после имени

<input type="hidden" name="rowid[]" value="{{$datacart->rowid}}">
<input type="text" name="quantity[]" value="{{$datacart->quantity}}">

Тогда в вашем контроллере метод

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];
  }
}
0 голосов
/ 11 мая 2019

Итак, что вам нужно сделать, это определить в html-разметке, что вход является массивом, подобным этому:

то есть, используя квадратные скобки [] рядом с именем элементов ввода

<?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) {
    foreach ($request->rowid as $index => $rowid) {
        $quantity = $request->quantity[$index];
        Cart::where('id', $rowId)
            ->update([
                'quantity' => $quantity
            ]);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...