laravel 在许多输入中上传文件
laravel upload files in many inputs
我正在尝试上传 4 个输入文件中的文件,我从中获得了解决方案
但问题是最后一个 file4 输入文件上传到数据库的所有字段
我的刀刃形态
{!! Form::file('file1', null,['class'=>'form-control']) !!}
{!! Form::file('file2', null,['class'=>'form-control']) !!}
{!! Form::file('file3', null,['class'=>'form-control']) !!}
{!! Form::file('file4', null,['class'=>'form-control']) !!}
在我的控制器中
$input = $request->all();
$files =[];
if ($request->file('file1')) $files[] = $request->file('file1');
if ($request->file('file2')) $files[] = $request->file('file2');
if ($request->file('file3')) $files[] = $request->file('file3');
if ($request->file('file4')) $files[] = $request->file('file4');
foreach ($files as $file)
{
if(!empty($file)){
$destinationPath = public_path() . '/uploads';
$filename = $file->getClientOriginalName();
$file->move($destinationPath, $filename);
}
}
$model = new Project($input);
$model -> file1 = $filename;
$model -> file2 = $filename;
$model -> file3 = $filename;
$model -> file4 = $filename;
$model->save();
如果你想使用这个实现,那么你应该使 $filename
成为一个数组,因为它将具有最后一个文件的值(当你迭代时)。
if(!empty($file)){
$destinationPath = public_path() . '/uploads';
$filename[] = $file->getClientOriginalName();
$file->move($destinationPath, $filename);
}
然后你可以从那个数组赋值:
$model = new Project($input);
$model -> file1 = isset($filename[0])?$filename[0]:null;
$model -> file2 = isset($filename[1])?$filename[0]:null;
$model -> file3 = isset($filename[2])?$filename[0]:null;
$model -> file4 = isset($filename[3])?$filename[0]:null;
$model->save();
也许可以进行更好的检查,但我们的想法是拥有一个包含上传文件名的数组。
想法:
我将为项目创建一个 File
模型,并在 Project
中声明一个 hasMany
关系,在 File
模型中声明一个 belongsTo
关系.
这将是表示数据的正确方式:
foreach($fileEntityList as $fileEntity){
$project->files()->attach($fileEntity);
}
查看 docs
中的 "One To Many"
这是因为您在 foreach 之外访问 $filename
,这意味着只使用最后一个。
你可以这样做:
$input = $request->all();
$model = new Project($input);
$hasFiles = false;
foreach (range(1, 4) as $i) {
$fileId = 'file' . $i;
if ($request->hasFile($fileId)) {
$hasFiles = true;
$file = $request->file($fileId);
$destinationPath = public_path() . '/uploads';
$filename = $file->getClientOriginalName();
$file->move($destinationPath, $filename);
$model->$fileId = $filename;
}
}
if ($hasFiles) {
$model->save();
}
希望对您有所帮助!
我正在尝试上传 4 个输入文件中的文件,我从中获得了解决方案
我的刀刃形态
{!! Form::file('file1', null,['class'=>'form-control']) !!}
{!! Form::file('file2', null,['class'=>'form-control']) !!}
{!! Form::file('file3', null,['class'=>'form-control']) !!}
{!! Form::file('file4', null,['class'=>'form-control']) !!}
在我的控制器中
$input = $request->all();
$files =[];
if ($request->file('file1')) $files[] = $request->file('file1');
if ($request->file('file2')) $files[] = $request->file('file2');
if ($request->file('file3')) $files[] = $request->file('file3');
if ($request->file('file4')) $files[] = $request->file('file4');
foreach ($files as $file)
{
if(!empty($file)){
$destinationPath = public_path() . '/uploads';
$filename = $file->getClientOriginalName();
$file->move($destinationPath, $filename);
}
}
$model = new Project($input);
$model -> file1 = $filename;
$model -> file2 = $filename;
$model -> file3 = $filename;
$model -> file4 = $filename;
$model->save();
如果你想使用这个实现,那么你应该使 $filename
成为一个数组,因为它将具有最后一个文件的值(当你迭代时)。
if(!empty($file)){
$destinationPath = public_path() . '/uploads';
$filename[] = $file->getClientOriginalName();
$file->move($destinationPath, $filename);
}
然后你可以从那个数组赋值:
$model = new Project($input);
$model -> file1 = isset($filename[0])?$filename[0]:null;
$model -> file2 = isset($filename[1])?$filename[0]:null;
$model -> file3 = isset($filename[2])?$filename[0]:null;
$model -> file4 = isset($filename[3])?$filename[0]:null;
$model->save();
也许可以进行更好的检查,但我们的想法是拥有一个包含上传文件名的数组。
想法:
我将为项目创建一个 File
模型,并在 Project
中声明一个 hasMany
关系,在 File
模型中声明一个 belongsTo
关系.
这将是表示数据的正确方式:
foreach($fileEntityList as $fileEntity){
$project->files()->attach($fileEntity);
}
查看 docs
中的 "One To Many"这是因为您在 foreach 之外访问 $filename
,这意味着只使用最后一个。
你可以这样做:
$input = $request->all();
$model = new Project($input);
$hasFiles = false;
foreach (range(1, 4) as $i) {
$fileId = 'file' . $i;
if ($request->hasFile($fileId)) {
$hasFiles = true;
$file = $request->file($fileId);
$destinationPath = public_path() . '/uploads';
$filename = $file->getClientOriginalName();
$file->move($destinationPath, $filename);
$model->$fileId = $filename;
}
}
if ($hasFiles) {
$model->save();
}
希望对您有所帮助!