我正在使用laravel。说到网站上的加载时间,我想知道哪种方法更适合添加图像。假设我每个帖子上载约10张图片。这也许很愚蠢,但这是两个想法
所以我想知道在运行查询方面哪个会更慢。例如,我有此查询。
$id = Post::first();
Image::where(“post_id”, “=“, $id);
在那个例子中,我要从Image表中获取与帖子相关的所有图像。
现在第二个查询
$second = Post::findOrFail($id);
然后foreach
在刀片视图中循环播放,然后将image1转换为image10。
在查询方面会更好。
现在,我在最近的构建中注意到的一件事是,处理我在应用程序中的某些查询需要花一些时间,仅处理请求大约需要250毫秒,而下载内容则需要15毫秒。我缩短了一些查询并优化了代码/查询,使它的处理时间达到了150ms。
哪个查询将花费更短的时间来处理,这将有助于减少加载时间。
注意:这完全是一种思想,上面使用的示例是实时编写的,并不反映任何实际的项目编码。
答案 0 :(得分:1)
在您的帖子模型中,您可以定义图像关系来告诉Laravel如何查找图像。使用单独的图像表是为每个帖子关联任意数量的图像的最佳方法。
在Post.php类中:
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();
此行代码将获取所有帖子以及与每个帖子关联的所有图像。它将运行两个查询;一个获取所有帖子,一个获取所有图片。
SELECT * FROM POSTS
SELECT * FROM IMAGES where post_id IN (results from above query)
然后,您可以在foreach循环中访问所有图像,而不必担心其他查询
@foreach($posts as $post)
{{ $post->images }}
@endforeach
答案 1 :(得分:0)
最好是用户seconde选项: 创建一个单独的表用于图像存储,其中“ post_id”是与图像表的关系。
并使用 在Post.php类中:
public function images()
{
return $this->hasMany(Image::class, 'post_id');
}
取回它们 因为通过这种方式,您可以无限地更新,删除或插入数据库中的新图像
答案 2 :(得分:0)
如果您有多个图像,请制作不同的模型
Post.php
public function images()
{
return $this->hasMany(Image::class, 'post_id');
}
Image.php
public function post()
{
return $this->belongsTo(Post::class, 'post_id');
}
这是最好的方法 无论您有多少张图片,这都可以保存多张图片