2016-12-20 3 views
1

CMSのためにmenusテーブルを設計したいと思います。私はすでにcategoriescontentsテーブルを持っています。メニューは特定のカテゴリまたはコンテンツへのリンクであるか、または他のウェブサイトからのURLであってもよい。データベースデザイン:CMSのメニューテーブル

どのように各メニューを定義することができますカテゴリまたはコンテンツですか? category_idcontent_id、およびurlの列はすべてnullです。

これは良いアプローチですか?何が最善の方法ですか?

menu_typeという名前の列を追加して、この値を持つメニューのタイプ(URL、カテゴリ、またはコンテンツ)を定義する必要があります。次のような別のテーブルを作成する必要がありますか?

id |タイプ名

1 |カテゴリ

2 |コンテンツ

3 | URL

と、コンテンツタイプ2のmenu_type列の挿入1 ...外部キー?

ありがとうございます。

+0

タイプに特に関連する特別な属性がない場合は、 'enum()'カラムを使用できます。それによって、文字列 "category"、 "content"、 "url"は一度だけ保存され、IDは各レコードに格納されます。しかし、テーブルをクエリすると、MySQLはIDの代わりに文字列を返すことを知っています。文字列またはIDで検索することもできます。したがって、 'WHERE type = 0'と' WHERE type = 'category'は同じものを返します – CptMisery

+0

ありがとうございます。それは素晴らしい解決策です! – Niloofar

答えて

0

あなたの条件によると、あなたはM-M Polymorphic Relationshipsmenus & contentscategories間を構築することができます。

としてあなたのテーブル構造は次のようになります。あなたのモデルは次のようになります

categories 
    id - integer 
    name - string 
    ... 

contents 
    id - integer 
    name - string 
    ... 

menus 
    id - integer 
    body - text 
    owner_id - integer 
    owner_type - string 
    ... 

と:

class Menu extends Model 
{ 
    /** 
    * Get all of the owning owner models. 
    */ 
    public function owner() // <--------- Get the owner model object 
    { 
     return $this->morphTo(); 
    } 
} 

class Category extends Model 
{ 
    /** 
    * Get all of the post's owner. 
    */ 
    public function menus() // <--------- Get all the associated Menu Model objects 
    { 
     return $this->morphMany('App\Menu', 'owner'); 
    } 
} 

class Content extends Model 
{ 
    /** 
    * Get all of the video's owner. 
    */ 
    public function menus() // <--------- Get all the associated Menu Model objects 
    { 
     return $this->morphMany('App\Menu', 'owner'); 
    } 
} 

urlの場合、あなたは空owner_id & owner_typeフィールドを聞かせたり、定義することができます追加の列typeを使用してメニューの種類を定義します。

希望すると便利です。

+0

ありがとう!私は 'http:// stackoverflow.com'のような実際のURL文字列を列に格納したいので、そのための' link'カラムが必要ですか? – Niloofar

+0

ええ、あなたもあなたのメニューテーブルでその列を持つことができます! –

+0

ありがとう:) – Niloofar

関連する問題