Laravel设置字段默认值遇SQLSTATE[HY000] 1364错误求助
问题分析与解决
核心原因
报错SQLSTATE[HY000]: General error: 1364 Field 'inscripted_at' doesn't have a default value但调试工具能看到字段传值,90%概率是Laravel模型的批量赋值限制导致的——你的Chababounauser模型没把inscripted_at和status加入可批量赋值的白名单,框架自动过滤了这两个字段,数据库接收不到值才触发错误。
解决步骤
1. 修正模型的$fillable属性
打开Chababounauser模型文件,把inscripted_at和status添加到$fillable数组里:
class Chababounauser extends Model { protected $fillable = [ 'name', 'surname', 'job', 'day', 'month', 'year', 'hobby', 'help', 'place', 'residence', 'email', 'photo', 'scholar_year', 'tel', // 新增以下两个字段 'inscripted_at', 'status' ]; }
2. 验证请求数据完整性(可选排查)
如果修改后还是报错,在控制器的create方法前临时添加打印代码,确认请求是否真的携带了目标字段:
// 在Chababounauser::create($req->all());之前添加 dd($req->all());
- 如果输出里没有
inscripted_at/status,检查表单是否加了@csrf、提交方式是否为POST,或者字段名是否和数据库表字段拼写不一致。 - 如果有这两个字段,那就是模型配置的问题,再检查
$fillable是否写错。
3. 备选方案:手动赋值(不推荐但应急可用)
如果不想修改模型$fillable,可以手动构建赋值数组:
Chababounauser::create([ 'name' => $req->name, 'surname' => $req->surname, 'job' => $req->job, 'day' => $req->day, 'month' => $req->month, 'year' => $req->year, 'hobby' => $req->hobby, 'help' => $req->help, 'place' => $req->place, 'residence' => $req->residence, 'email' => $req->email, 'photo' => $req->photo, 'scholar_year' => $req->scholar_year, 'tel' => $req->tel, 'inscripted_at' => $req->inscripted_at, 'status' => $req->status ]);
4. 数据库兜底设置(可选)
如果想避免前端未传值时的报错,可以在数据库中给inscripted_at字段设置默认值,或者允许字段为NULL,但这只是兜底方案,核心还是要确保Laravel能正确传递字段值。
内容的提问来源于stack exchange,提问作者MohaSetif
相关产品推荐
相关产品推荐

