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

时间:2018-06-19 18:14:01

标签: laravel laravel-blade laravel-5.6

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

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

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

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

在那个例子中,我要从Image表中获取与帖子相关的所有图像。

现在第二个查询

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

然后foreach在刀片视图中循环播放,然后将image1转换为image10。 在查询方面会更好。

现在,我在最近的构建中注意到的一件事是,处理我在应用程序中的某些查询需要花一些时间,仅处理请求大约需要250毫秒,而下载内容则需要15毫秒。我缩短了一些查询并优化了代码/查询,使它的处理时间达到了150ms。

哪个查询将花费更短的时间来处理,这将有助于减少加载时间。

注意:这完全是一种思想,上面使用的示例是实时编写的,并不反映任何实际的项目编码。

3 个答案:

答案 0 :(得分:1)

您正在寻找Eloquent Relationships

在您的帖子模型中,您可以定义图像关系来告诉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');
}

这是最好的方法 无论您有多少张图片,这都可以保存多张图片