Laravel: 正在将图像自定义名称存储到数据库

Laravel: Storing image custom name to db

我想将文件名存储到我的数据库中,以便它可以检索该图像并显示它,我已经实现了一些功能,通过在前面添加上传时间来防止将具有相同名称的文件添加到我的图像文件夹中在“$newImageName”变量中看到的实际文件名,我的问题是如何传递“$newImageName”以存储在我当前代码给定的数据库中?

public function store(Request $request)
{
    $this->validate($request, [
        'subject' => 'required|min:5',
        'tags' => 'required',
        'thread' => 'required|min:25',
        'image' => 'required|mimes:png,jpg,jpeg'
    ]);

    $newImageName = time() . '-' . $request->subject . '.' . $request->image->extension();

    $request->image->move(public_path('images'), $newImageName);

    $thread = auth()->user()->marketthreads()->create($request->all());

    $thread->tags()->attach($request->tags);

    return back()->withMessage('Market thread has been created');

任何帮助将不胜感激

谢谢:)

您需要在数据库中创建一个 table 来存储图像。在您的 table 中,您基本上需要存储中图像文件的 ID 和名称,在您的示例中称为 $newImageName。您可以通过如下方式进行迁移:

Schema::create('images', function (Blueprint $table) {
    $table->increments('id');
    $table->string('filename');
    $table->timestamps();
});
  • 提示:时间戳存储您的图像创建时间,因此您无需将其存储在文件名中。相反,稍后在创建项目后,您可以检索新对象生成的 ID 以用作您的文件名,以防止覆盖。这是一种更安全的方法,因为存在使用相同名称同时上传的细微差别。

每当您上传新项目时,在您的控制器中执行相应操作:

$image = new Image();
$image->filename = $newImageName;
$image->save();

这会将图像文件名保存在您的数据库中以供进一步使用。

  • 提示:如果您想进一步创建更结构化的设计,您可以继续为您的图像创建一个模型并将它们附加到您的其他模型,以便以更简单的方式检索它们。