2017-05-20 30 views
0

我需要一个建议来构建数据库。Laravel数据库结构暗示

基本上,我有这Project模型,并且每个项目都会有一个缩略图图片,主图片和精选图片,这意味着如果它在网站上显示,它会显示该特殊图片。所以目前,我的模型有3个不同的属性:thumbnail_imagefeatured_imageprimary_image

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

这一切工作正常,我只是有点担心,它不是可扩展的有这3个图像名称保存在项目的细节相同的表。所以我想也许会创建images表格,其中type属性。但我有一种感觉,这会使得人际关系混乱不堪。

也许有其他建议吗?

回答

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属性会自动将所有这些字段添加到每个模型结果。