我有一个包含许多行数据的表单,其中每一行都包含所有相同类型的数据。因此,每行都有“ID”,“名称”,“注释”,“状态”
所以我的表格看起来像这样。即使你不了解Laravel,也很明显发生了什么:
<td>{!!Form::text("cat_id[$category->category_id]", $category->category_id) !!}</td>
<td>{!! Form::text("cat_name[$category->category_id]",$category->name)!!}</td>
<td>{!! Form::textarea("notes[$category->category_id]",$category->notes)!!}</td>
<td>{!! Form::select("status[$category->category_id]", ['active'=>'Active' ,'deactivate' => 'Deactivate', 'delete' => 'Delete'],$category->status)!!}</td>
从表单中删除的POST数据不是很有用,如下所示:
array:5 [▼
"_token" => "XRuGUnf6xt7m4jlrjVa4tI954XLyIcLcqfy0NGr0"
"cat_id" => array:4 [▼
42 => "42"
22 => "22"
1 => "1"
31 => "31"
]
"cat_name" => array:4 [▼
42 => "Cedar"
22 => "Materials"
1 => "Products"
31 => "Slate"
]
"notes" => array:4 [▶]
"status" => array:4 [▶]
]
所以使用array_map,我重新格式化了数据,如下所示。我有两个问题:
我不知道如何在所有子数组中将所有键更改为正确的标签。“ID”,“名称”,“注释”,“状态”。
为了保存数据我假设我需要遍历每个子数组,并通过DB理解的特定键来识别值,即“ID”,“名称”,“注释”等我也很想知道完成这项工作的最佳方法。非常感谢 !
array:4 [▼
0 => array:4 [▼
0 => "42"
1 => "Cedar"
2 => "Notes"
3 => "active"
]
1 => array:4 [▼
0 => "22"
1 => "Asphalt"
2 => "Notes"
3 => "active"
]
2 => array:4 [▶]
3 => array:4 [▶]
]
答案 0 :(得分:0)
如果您已经定义了表单字段,那么您自己的生活将变得非常困难。更改您的表单字段,以便以更好的格式发布您的数据。
<td>{!! Form::text("category[$category->category_id]['category_id']", $category->category_id) !!}</td>
<td>{!! Form::text("category[$category->category_id]['name']", $category->name) !!}</td>
<td>{!! Form::textarea("category[$category->category_id]['notes']", $category->notes)!!}</td>
<td>{!! Form::select("category[$category->category_id]['status']", ['active' => 'Active', 'deactivate' => 'Deactivate', 'delete' => 'Delete'], $category->status) !!}</td>
您的数据将以以下格式发布:
[
'category' => [
1 => [
'category_id' => 1,
'name' => '...',
'notes' => '...',
'status' => '...',
],
2 => [
'category_id' => 2,
'name' => '...',
'notes' => '...',
'status' => '...',
],
// ...
],
]
后续问题
如果您不知道数组的索引,而不是使用for
循环,则可以使用foreach
循环。
foreach ($array as $key => $value) {
// ...
}
这可以很好地适用于您的情况,但是根据您的原始问题,它看起来好像您正在使用Laravel。因此,因为您想要更新现有的类别模型,我建议您使用以下内容。
// Find updated categories by ID and index collection by category ID
$ids = array_keys($request->category);
$categories = Category::whereIn('category_id', $ids)->get();
// Iterate through categories
$categories->each(function ($category) use ($request) {
// Find category attributes in request POST data and update category
$attributes = $request->category[$category->category_id];
$category->update($attributes);
});