Laravel数据库结构建议

时间:2017-05-20 17:33:59

标签: php mysql laravel-5

我需要一个构建数据库的建议。

基本上,我有这个Project模型,每个项目都有一个缩略图,主图像和特色图像,这意味着如果它在网站上出现,它将显示特殊的特征图像。所以目前,我的模型有3个不同的属性:thumbnail_image featured_image primary_image

上传每张图片时,会使用随机字符串自动生成名称。每个项目都有自己的文件夹,因此Project模型也具有images_folder属性。

一切正常,我只是有点担心它是不可扩展的,这3个图像名称保存在项目详细信息所在的同一个表中。所以我在考虑用images属性创建type表。但我觉得这会使关系混乱不堪。

也许还有其他建议吗?

1 个答案:

答案 0 :(得分:0)

将图像放在他们自己的表中将导致更多的开销,因为您每次都必须查询这些关系,甚至其中一个图像。在项目表中使用它是完全正常的,你不应该被打扰。如果你想让事情更简单,你可以尝试这种方法。

生成的图片名称 - somerandomname.jpg

primary_image   : somerandomname.jpg
featured_image  : somerandomname_featured.jpg
thumbnail_image : somerandomname_thumb.jpg

将图片名称存储在公共字段image下。字段image将包含值somerandomname.jpg

然后将以下内容添加到模型中。

protected $appends = [
    'primary_image', 'featured_image', 'thumbnail_image'
];

public function getPrimaryImageAttribute()
{
    return $this->image;
}

public function getFeaturedImageAttribute()
{
    return str_replace('.jpg', '_featured.jpg', $this->image);
}

public function getThumbnailImageAttribute()
{
    return str_replace('.jpg', '_thumb.jpg', $this->image);
}

这些访问器可以让您像任何数据库字段一样获取图像。 appends属性会自动将所有这些字段添加到每个模型结果中。