2017-02-11 10 views
0

それぞれのユーザーが関心を持っている「カテゴリ」および/または「ブランド」のIDを保持する「興味」と呼ばれる機能があります。 2つの別個のテーブルuser_category_interestsおよびuser_brand_interestについては、typeと呼ばれる列挙型列を追加しました。2つのテーブルを参照するときのLaravel DBスキーマ

これで、Eloquentメソッドを利用するために、スキーマビルダ、リレーションシップと外部キーの設定方法をどのように作成すればよいかわかりません。

Schema::create('user_interests', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->enum('type', ['categories', 'brands']); 
     $table->integer('reference_id')->unsigned(); 
     $table->timestamps(); 
    }); 

2つのテーブルとモデルを別々に作成するよりも良い方法はありますか?

P.S.私はlaravelを使用します。5.4

Brands Table: 
id | name 
----------- 
1 | Adidas 
2 | Nike 
3 | Puma 

Categories Table: 
id | name 
----------- 
1 | Clothes 
2 | Luxury 
3 | Sport Wear 


User_Interests Table: 
id | user_id | type | reference_id 
----------------------------------------- 
1 | 113  | 'brand' | 2 
1 | 113  | 'brand' | 3 
2 | 113  |'category'| 3 
3 | 224  | 'brand' | 1 
+0

[Laravel、別のモデルの投票に複数のデータベーステーブルが必要です](http://stackoverflow.com/questions/29222441/laravel-do-i-need-multiple-database-tables-for-投票で異なるモデル) – patricus

答えて

1

はい - read the docs on polymorphic relationsです。

これはあなたのものと似ていますが、interestable_idinterestable_typeという名前の列があります(必要に応じてこれを構成できます)。 interestable_typeは文字どおりApp\BrandまたはApp\Categoryinterestable_idのような参照クラス名の文字列表現になります。そのモデルの主キーとなります。

最良の部分は、熱心なローディング、それはすべてが雄弁を介して行われますよう、それは団体で行くことにすでに良いのであるなど

編集:私はあなたの3テーブルの設定は、まだこのような構造を表現するための最良の方法であることを追加する必要があり、あなたが使っているカラム名とそれをEloquentとフックする方法を提案するだけです。

+0

くそー!私が最後の夜に読まなかった唯一のセクションは、多態性の関係でした! – Hadu

関連する問題