【问题标题】:Laravel: Storing image custom name to dbLaravel:将图像自定义名称存储到数据库
【发布时间】:2022-02-09 19:32:44
【问题描述】:

我想在我的数据库中存储一个文件名,以便它可以检索该图像并显示它,我已经实现了一些东西,通过在前面添加上传时间来防止将同名文件添加到我的图像文件夹中'$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');

我们将不胜感激任何帮助

谢谢你:)

【问题讨论】:

    标签: php html laravel database web


    【解决方案1】:

    您需要在数据库中创建一个表来存储图像。在您的表中,您基本上需要一个 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();
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-28
      • 2012-04-19
      • 1970-01-01
      • 2010-12-27
      • 2015-07-17
      相关资源
      最近更新 更多