Laravel中Create方法失效问题求助:附store方法代码
排查Laravel中
create()方法失效的常见原因 嘿,我来帮你揪出create()方法失效的问题,结合你贴的代码,几个高频踩坑点给你列出来:
验证方法拼写错误
你代码里写的$this->Validate($request, [...])有问题!Laravel的验证方法是小写开头的validate(),大写V会直接触发方法不存在的错误,导致后续代码根本没机会执行。赶紧改成:$this->validate($request, [ 'name' => 'required|min:3|max:20', 'age' => 'required|integer|between:18,99', 'height' => 'required|integer|between:120,230', 'weight' => 'required|integer|between:30,150', 'region' => 'required|integer', 'city' => 'required', 'phone' => 'required|integer' ]);模型未配置批量赋值权限
Laravel的create()方法依赖模型的$fillable属性来允许批量写入数据,如果你的Person模型里没定义这个属性,就算代码执行了,数据也不会写入数据库。打开Person模型文件,加上可填充字段:protected $fillable = ['name', 'age', 'height', 'weight', 'region', 'city', 'phone'];要是图省事(不推荐生产环境这么干),也可以设置
protected $guarded = [];,表示允许所有字段批量赋值。代码拼写失误
你贴的代码里weight字段写成了weigh...,明显是没写完的语法错误,这会直接导致代码编译失败,create()自然跑不起来。检查完整代码,确保这个字段的键和值都正确:'weight' => $request->weight,验证规则的潜在问题
phone用integer规则不合理:手机号虽然是数字,但如果带国际区号(比如+86)就会验证失败,而且存为整数会丢失开头的0,建议改成字符串类型,规则换成required|string|digits:11(针对国内手机号);region的integer规则要和数据库字段类型匹配,如果数据库里region是字符串类型,验证会失败,后续代码也不会执行。
验证失败的隐式跳转
如果验证没通过,Laravel默认会自动重定向回上一页,带着错误信息,但如果你是写API接口,可能看不到这个反馈。可以加个异常捕获,直接打印错误信息排查:try { $this->validate($request, [...]); $person = Person::create([ 'name' => $request->name, 'age' => $request->age, 'height' => $request->height, 'weight' => $request->weight, 'region' => $request->region, 'city' => $request->city, 'phone' => $request->phone ]); return redirect()->back()->with('success', '创建成功'); } catch (\Illuminate\Validation\ValidationException $e) { dd($e->errors()); // 打印验证错误,快速定位问题 }
内容的提问来源于stack exchange,提问作者MrBelongsTo
相关产品推荐
相关产品推荐

