2017-05-20 48 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屬性會自動將所有這些字段添加到每個模型結果。