Laravel如何通过控制器向数据库存数据?数据无法存入排障求助
问题排查及修复方案
你代码里存在以下几处错误:
- 表单提交地址不匹配:Blade模板中表单的
action属性写的是/store,但你定义的POST路由是/reject,请求无法进入对应处理方法 - 模型引用错误:你的模型类名为
RejectionReasons,但控制器中调用时写成了RejectionReason(少了末尾的s),且没有引入模型的命名空间,会触发类不存在的报错 - 缺少CSRF校验:Laravel POST请求默认需要验证CSRF令牌,你的表单中没有添加
@csrf指令,请求会被直接拦截 - 字段类型不匹配:你表单提交的
reason_title是数组格式,直接赋值给字符串类型的数据库字段会触发类型错误
修复后的代码示例
1. Blade模板
<div class="form-check"> <form action="/reject" class="textbox" method="POST"> @csrf <h5><b> 选择驳回原因: </b></h5> <input type="checkbox" id="rejectReason1" name='reason_title[]' value='No responce'> 无响应 <br> <label for="Rejection"> <input type="checkbox" id="rejectReason2" name='reason_title[]' value='Skills mismatch'> 技能不匹配 </label> <br /> <div id="txtReasonRejected1" style="display: none"> <input type="text" id="Reasons1" /> </div> <input type="checkbox" id="rejectReason3" name='reason_title[]' value='Culture mismatch'> 文化不匹配 <br> <input type="checkbox" id="rejectReason4" name='reason_title[]' value='Salary expectation mismatch'> 薪资预期不匹配 <br> <label for="Rejection"> <input type="checkbox" id="rejectReason5" name='reason_title[]' value='Not enough knowledge/inclination for ColoredCow'> 对ColoredCow了解不足/认可度不够 </label> <br /> <div id="txtReasonRejected2" style="display: none"> <input type="text" id="Reasons2" /> </div> <button type="submit">驳回</button> </form> </div>
2. 控制器文件
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\RejectionReasons; class RejectionReasonsController extends Controller { public function index(){ $record = RejectionReasons::all(); return view('reject'); } public function store(Request $request){ $validated = $request->validate([ 'reason_title' => 'required|array', 'reason_title.*' => 'string' ]); foreach ($validated['reason_title'] as $reason) { RejectionReasons::create([ 'reason_title' => $reason ]); } return redirect('/routes'); } }
模型文件你已经正确配置了$fillable,无需修改。
内容的提问来源于stack exchange,提问作者Kick B
相关产品推荐
相关产品推荐

