什么是插入图像的最佳方式
What is more optimal way of inserting image
我正在使用 laravel。说到网站上的加载时间,我想知道哪种方法更适合添加图像。假设我每个 post 上传大约 10 张图片。这可能很愚蠢,但这是两个想法
- 在 table 中创建一个名为“image”“image1”的字段,依此类推,直到“image10”。
- 创建一个单独的 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');
}
这是最好的方法
这允许您保存多张图片,无论您有多少张图片
我正在使用 laravel。说到网站上的加载时间,我想知道哪种方法更适合添加图像。假设我每个 post 上传大约 10 张图片。这可能很愚蠢,但这是两个想法
- 在 table 中创建一个名为“image”“image1”的字段,依此类推,直到“image10”。
- 创建一个单独的 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');
}
这是最好的方法 这允许您保存多张图片,无论您有多少张图片