php - 根据 id 将表单中的数据插入到特定表中
问题描述
我在数据库名称主题中有一组数据,有 4 列 ['id'、'sub_name'、'sub_code'、'sub_group'。数据库的初始数据如下
+----+----------+----------+---------+
| id | sub_name | sub_code |sub_group|
+----+----------+----------+---------+
| 1 | A | S01 | 0 |
+----+----------+----------+---------+
| 2 | B | S02 | 0 |
+----+----------+----------+---------+
| 3 | C | S03 | 0 |
+----+----------+----------+---------+
我尝试做的事情是通过表单将“sub_group”值更新为“group 1/group 2/group 3”,我尝试遵循一些教程但它失败了。以下是我尝试过的代码。希望有人可以帮助我..
这是我在 HomeController 中的代码
public function updateGroup(Request $request)
{
$group = Subject::find($request->subject_id);
$group->sub_group = $request->sub_group;
$group->save();
return redirect('/dashboard');
}
这是我在 Subject.php 模型中的代码
protected $fillable = [
'sub_group'
];
这是我的代码
<form method="post" action="/dashboard">
{{ csrf_field() }}
<table class="table table-hover">
<thead class="text-warning" align="center">
<th>No.</th>
<th>Subject Name</th>
<th>Subject Code</th>
<th>Subject Group</th>
</thead>
<tbody>
@foreach ($subject as $index => $sub)
<tr align="center">
<td>{{$index+1}}</td>
<td>{{$sub->sub_name}}</td>
<td>{{$sub->sub_code}}</td>
<td>
<div class="col">
<select class="form-control" name="sub_group">
<option disabled selected>Assign Group...</option>
<option value="group1">Group 1</option>
<option value="group2">Group 2</option>
<option value="group3">Group 3</option>
</select>
<input type="hidden" name="subject_id" value="{{$sub->id}}">
</div>
</td>
</tr>
@endforeach
</tbody>
</table>
<button type="submit" class="btn btn-primary">Save</button>
</form>
根据我的表格,用户只能填写“sub_group”的选项,我尝试用用户选择的最新值(“group1/2/3”)替换“sub_group”数据库中的现有值
这是我在 web.php 中的代码
Route::post('/dashboard', 'HomeController@updateGroup');
我希望当前的“sub_group”数据将使用用户从表单中选择的值进行更新。提前致谢 :)
解决方案
您正在使用一个 POST 更新多条记录。这意味着,您需要将关联数组发布到将 ID 映射到值的服务器,而不是发布单个 ID。
您可能还希望它<select>
在sub_group
列中显示当前值。为此,我将按如下方式更新您的标记:
<select class="form-control" name="sub_group_{{ $sub->id }}">
<option disabled{{ !($sub->sub_group) ? ' selected' : ''}}>Assign Group...</option>
<option value="group1"{{ ($sub->sub_group == 'group1' ? ' selected' : '' }}>
Group 1
</option>
<option value="group2"{{ ($sub->sub_group == 'group2' ? ' selected' : '' }}>
Group 2
</option>
<option value="group3"{{ ($sub->sub_group == 'group3' ? ' selected' : '' }}>
Group 3
</option>
</select>
您的服务器将收到如下所示的数据:
[
'sub_group_1' => 'group1',
'sub_group_2' => 'group2',
'sub_group_3' => 'group3'
]
现在,在您的控制器中,您需要从键中解析 ID,查找数据库记录并保存新值:
use Illuminate\Support\Str;
...
public function updateGroup(Request $request)
{
foreach($request->all() as $key => $value) {
if (Str::startsWith($key, 'sub_group_')) {
$id = explode('_', $key)[2];
$group = Subject::find($id);
$group->sub_group = $value;
$group->save();
}
}
return redirect('/dashboard');
}
这是一个jsFiddle,您可以使用它来查看您的表单将提交给服务器的内容。
推荐阅读
- r - 库中的错误(ggplot2):没有名为“ggplot2”的包执行停止
- elasticsearch - 弹性 n gram 过滤器和分析器的嵌套查询
- javascript - 将 npm 构建目标文件夹更改为 tomcat
- javascript - Ember Data 中出现“超出最大调用堆栈大小”错误的原因可能是什么?
- html - 为什么 Firefox 不使用本地绝对路径中的 CSS?
- javascript - 如何使用 document.querySelector 在输入标签旁边获取文本?
- r - 在 R 中的神经网络中使用两个不同的 sigmoid 函数
- sql - 使用 postgresql 和 hibernate 获取实体版本号的优雅方式
- output - ELKI的输出指标
- angular - ngOnDestroy 在打开和关闭组件时起作用。离开网站时不会。角