laravel - 通过 Laravel 中的表单传递数组
问题描述
我正在尝试通过表单将多个数组传递给 Laravel 控制器并将表单值附加到关系中。
我试图遍历请求数组,但我得到一个“未定义的索引”错误,我知道我没有以某种方式获取数据。提前致谢。
form.php
<form method="POST" action="{{ route('/trs') }}">
@csrf
<input type="hidden" name="name[]" value="{{ $item->name }}" />
<input type="hidden" name="product_id[]" value="{{ $item->product_id }}" />
<input type="hidden" name="price[]" value="{{ $item->price }}" />
<input type="hidden" name="quantity[]" value="{{ $item->quantity }}" />
<button type="submit" class="btn btn-primary">
Buy
</button>
</form
Controller
public function purchase(Request $request)
{
$data = $request->except('_token');
$user= User::find(Auth::user()->id);
foreach ($data as $item) {
$ids = $item['product_id'];
$names = $item['name'];
$prices = $item['price'];
$quantities = $item['quantity'];
$orders->products()->attach([$ids => ['quantity' => $quantities, 'price' => $prices]]);
}
}
解决方案
您foreach
正在迭代输入,而不是这些输入中的数组:
foreach ($data as $item)
在第一次迭代$item
中是name
数组。在第二次迭代$item
中,product_id
数组等name
没有名为 的索引name
,price
或者quantity
,它的索引是数字的(0 索引)。
一种方法是迭代那些特别是数组的输入:
for ($i = 0; $i < count($data['names']); $i++) {
$name = $data['name'][$i];
$product_id = $data['product_id'][$i];
$price = $data['price'][$i];
...
}
这里有一些假设,但希望这能说明如果您想继续使用以当前方式命名的输入,您需要做什么。
更新:
如果您想更改输入的名称,您可能会更轻松地将它们分组:
<input type="hidden" name="items[{{ $item->id }}][name]" value="{{ $item->name }}" />
<input type="hidden" name="items[{{ $item->id }}][price]" value="{{ $item->price }}" />
...
foreach ($request->input('items', []) as $id => $item) {
$name = $item['name'];
$price = $item['price'];
...
}
现在,与单个项目相关的输入通过项目的 id 组合到一个数组中。
当您动态添加字段时,您必须确保您也在使用这种类似的命名,其中包括一个用于分组它们的键,在本例中为“id”。
items[27][name]
items[27][price]
...
推荐阅读
- java - 删除行后如何保证具有连续数字字段的列?
- php - how to make session login in wordpress
- android - 如何创建将用于支付应用程序用户 Uber 乘车费用的组织帐户?
- angularjs - 将 Angular 和 ui 线程与 web 工作者解耦,它在升级项目中是否有效?
- .net-core - 如何为已发布的 EXE (.Net Core) 添加版权
- reactjs - Dispatch action from redux store in non redux component
- php - Laravel Collection Diff 不返回两个集合之间的差异
- laravel - Upgrade Laravel 5.6 to 5.7
- mysql - How to combine data from two independent tables?
- sql - 如何通过为 salesforce 创建 SQL 查询来查找全年发送到单个域的电子邮件数量