Laravel:Store方法无法将文件名存入数据库但文件已存入文件夹
问题原因及修复方案
核心问题:模型未允许file_name字段批量赋值
你的代码中文件能成功移动到目标文件夹,但数据库file_name字段为NULL,最可能的原因是Post模型没有将file_name加入到$fillable属性中。Laravel的批量赋值(如create()方法)默认只允许填充模型中$fillable数组里声明的字段,未声明的字段会被自动忽略。
修复步骤
1. 更新Post模型
打开app/Models/Post.php,确保$fillable数组包含file_name:
class Post extends Model { use HasFactory; protected $fillable = [ 'title', 'description', 'file_name', // 必须添加这一行 'user_id' ]; }
2. 代码优化建议
- 初始化变量避免报错:在判断文件上传的代码块外先初始化
$fileName为null,防止未上传文件时出现变量未定义错误:$fileName = null; if($request->has('file')){ $file=$request->file('file'); $extension=$file->getClientOriginalExtension(); $fileName=time().'.'.$extension; $path=public_path('postFiles'); // 明确指向public文件夹路径 $file->move($path,$fileName); } - 移除多余的
save()调用:Post::create()方法已经自动完成数据入库操作,无需再调用$post->save()。 - 修正验证规则:验证规则里的
file_name应对应上传字段file,调整为:$request->validate([ "title"=>"required", "description"=>"required|string", "file"=>"nullable|file" // 验证上传的file字段 ]);
验证修复效果
重新上传文件后,数据库的file_name字段应该会正确记录生成的文件名。
内容的提问来源于stack exchange,提问作者Abdulmateen Maher
相关产品推荐
相关产品推荐

