Php 使用Laravel表单将多个文件上载到数据库

Php 使用Laravel表单将多个文件上载到数据库,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我正在尝试提交一个表单,如果用户需要,可以选择上传多个文件。我不断得到错误未定义的变量:data。我哪里出错了 控制器 公共函数storeRequest$request { $this->验证$request[ 'title'=>'必填|字符串|最大值:191', 'description'=>'required | string', “日期”=>“必需”|日期|最大值:191”, ]; 如果$request->hasfile'file'{ foreach$request->file'file'

我正在尝试提交一个表单,如果用户需要,可以选择上传多个文件。我不断得到错误未定义的变量:data。我哪里出错了

控制器

公共函数storeRequest$request { $this->验证$request[ 'title'=>'必填|字符串|最大值:191', 'description'=>'required | string', “日期”=>“必需”|日期|最大值:191”, ]; 如果$request->hasfile'file'{ foreach$request->file'file'为$file{ $fileName=$file->getClientOriginalName; $file->movepublic_路径'/files/',$fileName; $data[]=$fileName; } } 返回日志::创建[ 'title'=>$request['title'], 'description'=>$request['description'], “日期”=>$request[“日期”], 'file'=>json_encode$data, 'student\u id\u FK'=>会话'userID', ]; } $request->file'file'指的是文件表单数据,即单个文件上载,因此永远不会执行foreach块。这就是$data未定义的原因

您应该使用

foreach ($request->allFiles() as $file) {

...
}
问题是,只有在实际执行$data[]=行时才会创建$data变量。看起来这里不是这样的。因此,如果没有文件,只需在添加到数组之前定义数组即可

$data=[]; // ... $data[]=。。。 此外,以下内容中还有一个输入错误:

应该是

if($request->hasFile('file'))

注意大小写的变化。

如果输入的名称为files[],它不会返回数组吗?输入的名称为file[],我也这么做了,但仍然得到相同的错误。如果添加$request->hasfile'file',它返回false event,尽管我在表单标记中选择了fileenctype=multipart/form data?我添加了它,但它只是将[]存储到数据库中。在php中,您可以使用$data[],而不将其声明为数组。您是对的,但前提是它实际进入foreach循环,这里的情况似乎不是这样。我已经更新了我的答案。$request->hasfile'file'是false@BenjaminUrquhart是的,我想知道你为什么要发布你的HTML文件。如果您有多个name=file[]的输入,hasfile->file'file'将返回false
if($request->hasFile('file'))