2017-06-22 24 views
0

私はlaravelで多対多多型関係をはじめて使用しようとしています。そのためdocsでは、DBの構造のために、それは言う:Laravel - 多対多多型関係

taggables 
    tag_id - integer 
    taggable_id - integer 
    taggable_type - string 

私は不思議何tag_idtaggable_idの違いは何である、私たちは、それぞれに何を格納していますか?多対多の多型の関係を使用して

答えて

1

あなたはは、ブログの記事や動画間で共有されているユニークなタグの単一 リストを持つことができます。

私は「タグ付けできる」エンティティとして、taggable_id参照posts.idまたはvideos.idのいずれかを言うだろう、という読みました。次に、taggable_typeが質問に答えます。taggable_idは動画ですか、投稿ですか。

より良い視覚化のための完全なテーブル構造:

posts 
    id - integer 
    name - string 

videos 
    id - integer 
    name - string 

tags 
    id - integer 
    name - string 

taggables 
    tag_id - integer 
    taggable_id - integer 
    taggable_type - string 

例:

投稿

+----+-----------+ 
| id | name  | 
+----+-----------+ 
| 12 | test post | 
+----+-----------+ 

動画

個の
+----+-----------+ 
| id | name  | 
+----+-----------+ 
| 5 | test vid | 
+----+-----------+ 

タグ

+----+--------------+ 
| id | name   | 
+----+--------------+ 
| 88 | programming | 
+----+--------------+ 

taggables

+--------+-------------+---------------+ 
| tag_id | taggable_id | taggable_type | 
+--------+-------------+---------------+ 
| 88  | 12   | post   | 
+--------+-------------+---------------+ 
| 88  | 5   | video   | 
+--------+-------------+---------------+ 
+0

はい、しかしTAG_IDその後、何ですか? – Leff

+0

まあまあ、それは言う:タグのID、 'タグ'テーブルから。繰り返しますが、1つのタグを投稿と動画の間で*共有*することができます。 – lesssugar