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

Laravel表单上传文件存储时报Call to a member function store() on null错误

错误产生原因
  • 上传文件参数名调用错误:前端多文件上传字段命名为files[],Laravel 框架解析多文件字段时,调用$request->file()获取文件不需要携带后缀[],使用$request->file('files[]')会返回null,调用store()方法自然触发报错。
  • 多文件处理逻辑错误:$request->file('files')返回的是上传文件对象的数组,数组无法直接调用store()方法,需要遍历逐个处理文件存储。
  • 模型批量赋值配置错误:$fillable中配置的字段为files[],但实际数据表对应的字段名为files,批量赋值时无法正常匹配字段。
解决方案
  1. 修正模型配置
    首先修改Transfer模型的$fillable参数,同时新增$casts配置将files字段转换为数组类型,方便自动处理JSON序列化/反序列化:
// Transfer模型代码
protected $fillable = [
    'recipient_mail',
    'sender_mail',
    'title',
    'message',
    'files'
];

protected $casts = [
    'files' => 'array'
];
  1. 修正控制器文件处理逻辑
    遍历所有上传文件逐个存储,将存储路径集合存入数据库:
public function transferSubmit(TransferRequest $request){
    $filePaths = [];
    // 遍历处理每个上传文件
    foreach ($request->file('files') as $file) {
        $filePaths[] = $file->store('public/files');
    }

    $transfer = Transfer::create([
        'sender_mail' => $request->input('sender_mail'),
        'recipient_mail' => $request->input('recipient_mail'),
        'title' => $request->input('title'),
        'message' => $request->input('message'),
        'files' => $filePaths,
    ]);

    return redirect(route('home'))->with('message', 'File inviato con successo');
}

注:如果数据表files字段为字符串类型,未使用JSON格式,可将files赋值行替换为'files' => json_encode($filePaths)即可正常存储。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:54:08