首页 > 解决方案 > 更改图像名称并保存到 DB Laravel

问题描述

嗨,我无法在 Laravel 项目中将图像名称存储到数据库中。如何解决这个问题?

这是控制器的代码

 class TarifController extends Controller
{
  public function store(Request $request)
   {
    $request->validate([
        'title_uz' => 'required',
        'desc_uz' => 'required',
        'full_desc_uz' => 'required',
        'company_id' => 'required',
        'order' => 'required',
        'image' => 'required|image|mimes:jpeg,png,jpg,svg|max:2048',
    ]);
    $image1 = time().'.'.$request->image->extension();
    $request->image->move(public_path('images'), $image1);
    Tarif::create($request->all());
    return redirect()->route('tarifs.index')
        ->with('success','Yangi tarif muvoffaqiyatli qo`shildi.');
  }
}

这是视图中的代码

<form role="form" action="{{ route('tarifs.store') }}" method="post" enctype="multipart/form-data">
@csrf
 <div> .. another fields ..  </div>
 <div class="col-5">
     <label for="image">Surat</label>
      <input type="file" class="form-control" name="image" id="image" required>
 </div>
<div> .. another fields ..  </div>
<div class="card-footer">
     <a class="btn btn-info" href="{{ route('tarifs.index') }}">Qaytish</a>
     <button type="submit" class="btn btn-success">Saqlash</button>
</div>
</form>

它将图像保存到 public/images 文件夹,但没有将文件名或路径保存到 DB。字段名称是数据库上的“图像”。

标签: laravelfile-upload

解决方案


如果您需要将新值合并到请求对象中,则以下代码可以解决问题:

$request->merge(['image' => 'avatar.png']);

或者,您可以像这样更改代码:

$image1 = time().'.'.$request->image->extension();
$request->image->move(public_path('images'), $image1);
$input = $request->all();
$input['image'] = $image1;
Tarif::create($input);

推荐阅读