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

时间:2019-05-09 17:02:02

标签: php mysql laravel eloquent

我正在尝试提交一个带有用户上载选项的表格。我不断收到错误消息“未定义的变量:数据”。我哪里做错了?

控制器

public function store(Request $request)
{
    $this->validate($request, [
        'title' => 'required|string|max:191',
        'description' => 'required|string',
        'date' => 'required|date|max:191',
    ]);

    if ($request->hasfile('file')) {
        foreach ($request->file('file') as $file) {
            $fileName = $file->getClientOriginalName();
            $file->move(public_path().'/files/', $fileName);
            $data[] = $fileName;
        }
    }

    return logbook::create([
        'title' => $request['title'],
        'description' => $request['description'],
        'date' => $request['date'],
        'file' => json_encode($data),
        'student_id_FK' => session('userID'),
    ]);
}

2 个答案:

答案 0 :(得分:0)

$request->file('file')引用了file表单数据(即单个文件上载),因此从未执行foreach块。这就是$data未定义的原因。

您应该使用

处理多个文件
foreach ($request->allFiles() as $file) {

...
}

答案 1 :(得分:-1)

问题在于,仅在实际执行$data行的情况下创建$data[] =变量。看起来情况并非如此。因此,只需在添加数组之前先定义数组即可使其在没有文件的情况下正常工作。

$data = [];
// ...
$data[] = ...

此外,hasFile method中有一个错字:

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

应该是

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

请注意大小写更改。