Laravel 5.5 表单数据存入数据库(Eloquent模型)报错排查
搞定你的Laravel数据插入问题
嘿,看你抛出的SQL错误,核心问题很明显——你的插入操作里没给model和type字段赋值,而且这俩字段在数据库里是必填项(Migration里没设nullable())。咱们来拆解下代码里的问题:
1. 控制器里的低级赋值错误
先看CarsController的store方法,这里有个离谱的小失误:
$cars->brand = $request->input('brand'); $cars->brand = $request->input('model'); // 这里应该是$cars->model啊! $cars->brand = $request->input('type'); // 这里要改成$cars->type! $cars->brand = $request->input('doors'); // 这里得是$cars->doors!
你把model、type、doors的值全塞给brand字段了,导致model和type完全没被赋值,数据库自然会报错说“model字段没有默认值”。
修正后的store方法应该是这样:
public function store(Request $request) { $cars = new Cars; $cars->brand = $request->input('brand'); $cars->model = $request->input('model'); $cars->type = $request->input('type'); $cars->doors = $request->input('doors'); $cars->priceHour = $request->input('priceHour'); $cars->priceDay = $request->input('priceDay'); $cars->priceWeek = $request->input('priceWeek'); $cars->priceMonth = $request->input('priceMonth'); $cars->priceYear = $request->input('priceYear'); $cars->save(); // 这里建议用命名路由跳转,比硬写URL靠谱 return redirect()->route('cars.create'); }
2. 视图里漏掉了type输入框
你的Migration里定义了必填的type字段,但AddCar.blade.php里完全没有这个输入项!用户没法输入type的值,就算控制器改对了,还是会因为type为空报错。
赶紧在视图里加个type的输入框,比如放在model和doors之间:
<input type="text" name="type" placeholder="Typ pojazdu">
3. 可选优化:用批量赋值减少出错概率
为了避免这种手动赋值的低级错误,你可以给Cars模型开启批量赋值,代码会简洁很多:
先在Cars模型里添加$fillable属性:
namespace App; use Illuminate\Database\Eloquent\Model; class Cars extends Model { protected $fillable = [ 'brand', 'model', 'type', 'doors', 'priceHour', 'priceDay', 'priceWeek', 'priceMonth', 'priceYear' ]; }
然后store方法可以简化成一行:
public function store(Request $request) { Cars::create($request->all()); return redirect()->route('cars.create'); }
这样就不用一个个字段赋值,大大降低出错的可能。
4. 路由跳转的小细节
你原来写的return redirect('admin.AddCar');是错的,因为你用的是Route::resource,对应的创建页面命名路由是cars.create,用redirect()->route('cars.create')跳转更稳定,不会因为URL结构变化失效。
把这些修改都做完,再提交表单试试,应该就能正常把数据插入数据库了!
内容的提问来源于stack exchange,提问作者Kamil Lonowski
相关产品推荐
相关产品推荐

