我想使用Laravel中的2个输入文件字段上载多个图像,并将这2个文件放入具有不同属性(imagepath1, imagepath2
)的DB中。如果我尝试该代码,则两者都输入并上传相同的文件,例如imagekitchen2(两者都发生了变化,但imagepath1变为imagepath2,而imagepath2仍为imagepath2)。
Controller
public function store(Request $request)
{
$kitchens = new Kitchen();
$kitchens->title = $request->input('title-kitchen');
$kitchens->description = $request->input('description-kitchen');
if ($request->hasfile('imagekitchen1')) {
$file = $request->file('imagekitchen1');
$extension = $file->getClientOriginalExtension();
$filename = time().'.'.$extension;
$file->move('uploads/product/kitchen/', $filename);
$kitchens->imagepath1 = $filename;
} else {
$kitchens->imagepath1 = '';
}
$kitchens->save();
if ($request->hasfile('imagekitchen2')) {
$file = $request->file('imagekitchen2');
$extension = $file->getClientOriginalExtension();
$filename = time().'.'.$extension;
$file->move('uploads/product/kitchen/', $filename);
$kitchens->imagepath2 = $filename;
} else {
$kitchens->imagepath2 = '';
}
$kitchens->save();
}
查看
<div class="card-body">
<div class="row">
<div class="col-md-6">
<form action="{{ route('addimagekitchen') }}" enctype="multipart/form-data" method="POST">
{{ csrf_field() }}
<div class="form-group">
<label>Title</label>
<label>
<input type="text" name="title-kitchen" class="form-control">
</label>
</div>
<div class="input-group">
<div class="custom-file">
<label for="image" style="display: block">Main image</label> <br/>
<input type="file" name="imagekitchen1" style="margin-left: 20px">
</div>
</div>
<div class="input-group">
<div class="custom-file">
<label for="image" style="display: block">Second image</label> <br/>
<input type="file" name="imagekitchen2" style="margin-left: 20px">
</div>
</div>
<div class="input-group">
<div class="custom-file">
<label for="image" style="display: block">Third image</label> <br/>
<input type="file" name="imagekitchen[]" style="margin-left: 20px">
</div>
</div>
<div class="form-group">
<label>Description</label>
<textarea class="form-control" name="description-kitchen" id="description-kitchen"
rows="3"></textarea>
</div>
<button type="submit" class="btn btn-success"> Insert</button>
<a href="/kitchen-admin" class="btn btn-danger"> Cancel </a>
</form>
</div>
</div>
</div>
我不确定您的意思,但您可能应该更改:
$kitchens->save();
if($request->hasfile('imagekitchen2')){
进入
$kitchens->save();
$kitchens = new Kitchen();
if($request->hasfile('imagekitchen2')){
这样,您将创建2条记录,否则您使用相同的对象并在创建后对其进行更新。根据您的需要,您可能还需要添加:
$kitchens->title = $request->input('title-kitchen');
$kitchens->description = $request->input('description-kitchen');
之前:
if($request->hasfile('imagekitchen2')){
如果要为两个记录保存相同的标题和描述。
当然,我不确定如果没有文件,是否要创建记录-如果没有文件上传,目前两者都将被保存。
尝试一下
尝试一下
public function store(Request $request)
{
$kitchens = new Kitchen();
$kitchens->title = $request->input('title-kitchen');
$kitchens->description = $request->input('description-kitchen');
if ($request->hasfile('imagekitchen1')) {
$file = $request->file('imagekitchen1');
$extension = $file->getClientOriginalExtension();
$filename = time().'.'.$extension;
$file->move('uploads/product/kitchen/', $filename);
$kitchens->imagepath1 = $filename;
} else {
$kitchens->imagepath1 = '';
}
$kitchens->save();
if ($request->hasfile('imagekitchen2')) {
$file = $request->file('imagekitchen2');
$extension = $file->getClientOriginalExtension();
$filename = time().'.'.$extension;
$file->move('uploads/product/kitchen/', $filename);
$kitchens->imagepath2 = $filename;
} else {
$kitchens->imagepath2 = '';
}
$kitchens->save();
$datas = [];
$result = [];
if ($request->hasfile('imagekitchen')) {
foreach ($request->file('imagekitchen') as $key => $file) {
$name = $file->getClientOriginalName();
$file->move(public_path() . '/uploads/product/kitchen/', $name);
$datas[$key] = $name;
$file = new Kitchen();
foreach ($datas as $data) {
$file->imagekitchen = implode (", ", $data);
$file->save();
}
}