什么是插入图像的最佳方式

What is more optimal way of inserting image

我正在使用 laravel。说到网站上的加载时间,我想知道哪种方法更适合添加图像。假设我每个 post 上传大约 10 张图片。这可能很愚蠢,但这是两个想法

  1. 在 table 中创建一个名为“image”“image1”的字段,依此类推,直到“image10”。
  2. 创建一个单独的 table 用于图像存储,其中“post_id”是与图像的关系 table。

所以我想知道哪个在 运行 查询方面会更慢。例如,我有这个查询。

$id = Post::first();
Image::where(“post_id”, “=“, $id);

在那个例子中,我从与 post 相关的图像 table 中获取所有图像。

现在进行第二个查询

$second = Post::findOrFail($id);

并且 foreach 在我们的 blade 视图中循环它,并将 image1 带到 image10。 在查询方面哪个更好。

现在我在最近的构建中注意到的一件事是,它需要一些时间来处理我在应用程序中的一些查询,处理请求大约需要 250 毫秒,下载内容需要 15 毫秒。我缩短了我的一些查询并优化了 code/query,我得到了 150 毫秒的处理时间。

哪个查询的处理时间更短,哪个有助于缩短加载时间。

注意:这完全是一个想法,上面使用的例子是用real-time写的,并不反映任何实际的项目编码。

您正在寻找 Eloquent Relationships

在您的 post 模型中,您可以定义图像关系来告诉 Laravel 如何查找图像。使用单独的图像 table 是每个 post.

关联任意数量图像的最佳方式

在 Post.php class:

public function images()
{
    return $this->hasMany(Image::class, 'post_id');
}

然后替换你的第一个例子你可以做

$post = Post::first();
$images = $post->images; // this will be an array of all the images associated with that post.

既然你问的是性能,你应该看看eager loading。基本上一旦定义了关系,您就可以告诉 laravel 加载所有相关记录。

$posts = Post::with('images')->get();

这行代码将获取所有 post 以及与每个 post 关联的所有图像。它将 运行 两个查询;一个获取所有 post,一个获取所有图像。

SELECT * FROM POSTS
SELECT * FROM IMAGES where post_id IN (results from above query)

然后您可以在 foreach 循环中访问所有图像,而不必担心额外的查询

@foreach($posts as $post) 
    {{ $post->images }}
@endforeach

最好使用第二个选项: 创建一个单独的 table 用于图像存储,'post_id' 是与图像 table.

的关系

并使用 在 Post.php class:

public function images()
{
    return $this->hasMany(Image::class, 'post_id');
}

把它们取回来 因为通过这种方式,您可以在数据库中无限地更新、删除或插入新图像

如果你有多个图像制作不同的模型

Post.php

public function images()
{
    return $this->hasMany(Image::class, 'post_id');
}

Image.php

public function post()
{
    return $this->belongsTo(Post::class, 'post_id');
}

这是最好的方法 这允许您保存多张图片,无论您有多少张图片