Laravel foreach 形式只需要最后一行[重复]
Posted
技术标签:
【中文标题】Laravel foreach 形式只需要最后一行[重复]【英文标题】:Laravel foreach in form takes only last row [duplicate] 【发布时间】:2021-05-01 07:46:34 【问题描述】:我正在尝试通过表单更新餐厅菜单。首先,我获取菜单类别的所有内容,并通过 foreach 将它们放入输入值中,这样它们都是可编辑的,并且可以预先设置好进行编辑。
现在最大的问题是每当我完全尝试编辑表单时,它只会编辑最后一行,因为那是最后收到的,因此忽略了其余的。我如何让表单从 foreach 提交所有请求的项目?
为每个项目制作一个表单将是一个很大的禁忌,因为这样每一行都会有一个按钮,这会阻碍生产力
刀片视图:
<form action="test" method="head">
@foreach ($Voorgerecht as $item)
@csrf
<tr>
<td>
<input type="text" name="id" value="$item->id">
</td>
<td>
<input type="text" name="name" value="$item->product_name">
</td>
<td>
<input type="text" name="price" value="$item->product_price">
</td>
<td>
<input type="submit" value="edit">
</td>
@endforeach
</tr>
</form>
控制器:
public function editsubmit(Request $req)
update::where('id',$req->id)
->update(['product_name'=>$req->name]);
return redirect('/admin');
【问题讨论】:
名称是唯一的,所以如果有多个输入使用相同的名称,那么它只会传入最后一个。您需要使用 CBroe 链接中的数组名称 您还需要将结束行标记</tr>
移动到foreach
内以避免创建无效标记(如果您在循环中打开一行,您也需要在此处关闭它)。
我移动了 如果您真的想一次性完成所有操作,您可以将数组形式的输入命名为所有记录的容器,例如 records[1][product_name]
:
<form ...>
@csrf
@foreach ($Voorgerecht as $item)
<tr>
...
<td>
<input type="text" name="records[ $item->id ][product_name]" value="...">
</td>
<td>
<input type="text" name="records[ $item->id ][product_price]" value=" $item->product_price ">
</td>
...
</tr>
@endforeach
</form>
然后在控制器中
... do validation ...
foreach ($request->input('records', []) as $id => $record)
Model::findOrFail($id)->update($record);
【讨论】:
这似乎不起作用 刚刚更新了它......“似乎不起作用”是什么意思? 好吧,我没有模型 findorfailModel
是一个占位符,表示您的模型被命名...并且所有模型都有一个 findOrFail
方法
好吧,但这是来自 2 个输出的 print_r 输出: Array ( [product_name] => item1 [id] => 1 ) Array ( [product_name] => item2 [id] => 2 )我如何将这些放在更新查询中?【参考方案2】:
您可以更改表单字段,以便将它们作为数组发布:
<input type="text" name="id[ $loop->index ]" value="$item->id">
我添加了 $loop->index 以便合并所有字段。
【讨论】:
好的,所以这似乎几乎现在工作了我得到这个:SQL:更新Products
设置product_name
=?其中id
= 3
开我的玩笑,我忘了也编辑名称..现在唯一的问题是它只编辑了一个 id 为 1 的行...所以所有项目现在都在数组中,但被放入第一个行以上是关于Laravel foreach 形式只需要最后一行[重复]的主要内容,如果未能解决你的问题,请参考以下文章