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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 18:52:40