You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8表单验证通过但插入数据库生成空行问题

问题根因

核心错误出在Post模型的$fillable批量赋值白名单配置格式错误,这是导致插入空数据行的直接原因。
你遇到的现象和该错误完全匹配:

  • dd()能正常打印表单提交数据:因为dd直接读取请求对象的原始提交内容,和模型配置无关
  • 验证规则正常生效:表单验证直接基于请求数据做校验,不涉及模型的批量赋值逻辑
  • 写入数据库生成空行:Laravel的create()方法依赖$fillable配置做批量赋值字段过滤,配置错误时所有提交的业务字段都会被拦截,最终只会插入模型自动维护的主键、created_at、updated_at字段,其余字段全部为空。
错误配置与修正方案

你当前的$fillable把所有字段名写在了同一个字符串内,属于单个数组元素,Laravel无法识别到任何可批量赋值的字段:

// 错误写法
protected $fillable = ['name_en, body_en, name_ua, body_ua, name_ru, body_ru,
    meta_title_en, meta_description_en, meta_keywords_en, meta_title_ua, meta_description_ua, meta_keywords_ua,
    meta_title_ru, meta_description_ru, meta_keywords_ru, image, price, status'];

修正为每个字段单独作为一个数组元素,字段名的引号独立闭合,逗号放在引号外部:

// 正确写法
protected $fillable = [
    'name_en',
    'body_en',
    'name_ua',
    'body_ua',
    'name_ru',
    'body_ru',
    'meta_title_en',
    'meta_description_en',
    'meta_keywords_en',
    'meta_title_ua',
    'meta_description_ua',
    'meta_keywords_ua',
    'meta_title_ru',
    'meta_description_ru',
    'meta_keywords_ru',
    'image',
    'price',
    'status'
];
其他需要修复的隐藏问题
  • 视图表单标签语法错误:表单开头写的是form action=,缺失了左尖括号,正确写法为<form action="{{ route('amicms.posts.store') }}" method="post" enctype="multipart/form-data">,否则表单标签无法正常渲染
  • 表单块默认隐藏问题:三个语言版本的输入容器都添加了d-none类(默认隐藏),如果没有配套JS逻辑控制切换显示对应语言的表单块,隐藏域无法被填写,会触发必填验证报错
  • 文件存储路径问题:当前上传路径写的是相对路径uploads/,建议使用Laravel自带的文件存储方法,避免目录权限导致的上传失败
  • 提交后响应逻辑问题:当前store方法执行完写入后直接返回视图,建议改为重定向到列表页路由,避免用户刷新页面时重复提交表单

内容的提问来源于stack exchange,提问作者Illia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 22:12:23