Laravel执行insert操作时插入迁移默认值而非请求提交数据问题
问题根因
这是Laravel批量赋值机制触发的字段过滤问题,你传递的is_free字段被模型自动过滤,最终未参与写入操作,数据库直接使用迁移定义的默认值。
解决方案
步骤1:修改Chapter模型批量赋值白名单
打开app/Models/Chapter.php文件,找到$fillable属性,将is_free加入允许批量赋值的字段列表:
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Chapter extends Model { // 确保$fillable数组包含所有你需要通过create批量写入的字段 protected $fillable = [ 'title', 'slug', 'description', 'content', 'is_free', // 新增此行 ]; }
验证方案(可选)
如果修改后仍有问题,可通过单字段赋值写入方式排查是否为批量赋值导致:
$chapter = new Chapter(); $chapter->fill($request->only(['title','slug','description','content'])); $chapter->is_free = $request->is_free; $chapter->save();
如果上述代码可正常写入is_free字段的值,可进一步确认是批量赋值白名单配置问题。
其他少见排查方向
- 检查Chapter模型是否定义了
setIsFreeAttribute修改器,是否存在强制修改字段值的逻辑 - 检查请求传入的
is_free值是否为字符串类型的0/1,是否存在字段类型不兼容被强制转为默认值的情况,可在写入前通过(int)$request->is_free做类型转换
内容的提问来源于stack exchange,提问作者Dilhan
相关产品推荐
相关产品推荐

