为一个实体提供许多图像和(缩略图?)的最佳方法是什么?

时间:2013-01-20 19:20:32

标签: mysql database database-design symfony

我正在使用PHP和MySQL(通过框架Symfony 2)创建一个网站,以显示我的收藏品的一些自行车。我想为一辆自行车存储尽可能多的图像。

所以我认为这样做的一个好方法是让我的自行车实体图片实体并将Bike实体与Picture实体链接起来一对多关系

因此,Picture实体看起来像这样:

id     bike_id    title   path

这是最好的方法吗?非常感谢您的建议。

编辑关于存储缩略图..
我们还要存储缩略图版本吗?由于我将在一个页面中显示许多图片,因此我读到,使用宽度和高度缩小图片是一种不好的做法,最好存储缩小版本的图片。

所以Picture实体更像是这样吗? :

id     bike_id    title    path     path_thumbnail

再次感谢

2 个答案:

答案 0 :(得分:1)

是的,尽管你可以  通过废弃path并将图像存储为{id}.jpg来简化命名图像并避免命名冲突。

更新 - 从您的编辑中,我想您错过了我所说的命名图片的重点。我建议你不要存储任何图片或缩略图网址。相反,只需要一个看起来像这样的表:

Id    BikeId    Title
277   123       "Cool picture"

然后根据Id命名所有图像和缩略图文件。在上面的示例中,“酷图片”文件可以称为 /img/277.jpg /img/277-thumb.jpg

这样您就不必在数据库中存储大量文件名,并且文件名冲突也不会有任何问题。

答案 1 :(得分:1)

您需要One to many实体和图片之间的关系

Picture.php

/**
     * @ORM\ManyToOne(targetEntity="Bike", inversedBy="images")
     * @ORM\JoinColumn(name="bike_id", referencedColumnName="id")
     */
    protected $Bike;

然后,每张图片可以有一行,您可以像上传单张图片一样使用symfony image上传