在Laravel中发布多个具有相同名称的字段

时间:2019-05-10 21:43:13

标签: php laravel

我正在尝试创建一个购物车,我想发布多个具有相同名称的字段并对其进行处理

<?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和数量。

以下代码显示了我的控制器。但是使用此代码,它只会更新一项(无效)。但是我想分别更新每种产品的数量

忘记了,我使用https://github.com/Crinsane/LaravelShoppingcart作为购物车插件

4 个答案:

答案 0 :(得分:1)

首先让我们改善刀片文件,可以使用刀片语法而不是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是因为静态方法无效。

答案 1 :(得分:0)

因此,您需要做的是在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>

,然后在controller方法中处理请求时,您需要像这样处理它:

public function update_cart(request $request) {
    foreach ($request->rowid as $index => $rowid) {
        $quantity = $request->quantity[$index];
        Cart::where('id', $rowId)
            ->update([
                'quantity' => $quantity
            ]);
    }
}

答案 2 :(得分:0)

您需要在名称后添加[]

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

答案 3 :(得分:0)

谢谢。这段代码对我有用。我用于索引循环

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

        }