2017-05-20 17 views
0

データベースを構造化するための提案が必要です。Laravelデータベース構造の提案

基本的に私はこのProjectモデルを持っており、それぞれのプロジェクトはサムネイル画像、主画像、特色画像を持ちます。つまり、サイトに特集されると、その特集画像が表示されます。だから、現時点では、私のモデルは3種類のプロパティ:thumbnail_imagefeatured_imageprimary_imageを持っています。

各画像をアップロードするとき、名前はランダムな文字列を使用して自動的に生成されます。各プロジェクトには独自のフォルダがあるため、Projectモデルにもimages_folderというプロパティがあります。

これはすべてうまくいきますが、プロジェクトの詳細が同じテーブルに保存されているため、3つのイメージ名をスケーラブルに扱えないのはちょっと心配です。だから私はtypeプロパティを持つimagesテーブルを作成することを考えていました。しかし、私はこれが関係をたくさん乱すことになると感じています。

おそらく他の提案はありますか?

答えて

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プロパティは、すべてのモデル結果にすべてのフィールドを自動的に追加します。

関連する問題