Laravel中如何从双表获取选中选项值并插入Games表
实现Laravel视图展示分类名称并提交对应ID到Games表的方案
刚好匹配你要的需求:在表单里展示Genres表的分类名称给用户选择,提交表单时把选中项的genreid插入到Games表中。下面是完整的代码实现和关键细节说明:
视图代码(表单中的下拉选择框)
<select name="genreid"> @foreach($genres as $genre) <option value="{{ $genre->genreid }}"> {{ $genre->genre }} </option> @endforeach </select>
视图逻辑说明:
- 从控制器传递过来的
$genres集合中循环遍历每一条分类记录 - 下拉选项的
value属性设置为genreid(这是要存入Games表的外键值) - 选项显示的文本是
genre字段(分类名称,让用户能直观看到选择的分类)
控制器代码(处理表单提交的方法)
use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; public function insertgame(Request $request) { // 验证请求数据,注意修正原代码里的验证字段名 $this->validate($request, array( 'gamename' => 'required|min:3', 'price' => 'required|int|min:1', 'genreid' => 'required', // 这里把原规则里的'genre'改成了'genreid',匹配视图的name属性 'releaseddate' => 'required|date', 'picture' => 'required|mimes:jpeg,jpg,png,gif' )); // 获取请求中的各项参数 $gamename = $request->input('gamename'); $genreid = $request->input('genreid'); // 对应视图中select的name属性 $price = $request->input('price'); $releaseddate = Carbon::parse($request->input('releaseddate')); $picture = $request->file('picture')->getClientOriginalName(); // 组装要插入Games表的数据数组 $data = array( 'gamename' => $gamename, 'genreid' => $genreid, 'price' => $price, 'releaseddate' => $releaseddate, 'picture' => $picture ); // 插入数据到Games表 DB::table('games')->insert($data); // 重定向到游戏管理页面 return redirect('managegame'); }
控制器关键细节说明:
- 验证规则修正:原代码里验证规则写的是
'genre' => 'required',但视图下拉框的name是genreid,必须改成'genreid' => 'required',否则会触发验证失败。 - 参数获取:通过
$request->input('genreid')正确获取用户选中的分类ID,这是要存入Games表的外键值。 - 日期处理:用Carbon解析提交的日期字符串,确保存入数据库的日期格式符合要求。
- 文件处理优化建议:如果要避免上传图片的文件名重复,可以给文件名加上时间戳,同时记得把文件移动到指定目录:
$picture = time() . '_' . $request->file('picture')->getClientOriginalName(); $request->file('picture')->move(public_path('images'), $picture); - 数据插入:组装好数据数组后,通过DB门面的
insert方法插入到games表,完成后重定向到游戏管理页面。
内容的提问来源于stack exchange,提问作者Steve Ruru
相关产品推荐
相关产品推荐

