2016-12-21 14 views
0

私はアプリケーションをビルドしています。私は20のカテゴリの周りに自分のアプリがあり、各カテゴリにはいくつかのカスタムフィールドがあります。ユーザーがカテゴリを選択し、カスタムフィールドを入力します。その後、DBに値を格納する必要があります。あなたはそれを行うための最良の方法が何であるかを提案できますか?また、私はこのカスタムフィールドでフィルタすることができる必要があります - 高度なフィルタのように、パフォーマンスもキーです。laravelでEAVモデルを使用する必要がありますか?

このような場合、カスタムフィールドを持つ別のテーブルを各カテゴリに対して作成してください。

は、私は考えることができる2つのオプションがあります

ダニー

+0

残りの部分があまりにも広範で特定されていないので、私は最後の質問におおよそ答えます。 categoryはテーブルでなければならず、category_custom_fieldsは別のものでなければなりません。カスタムフィールドテーブルには、それらをリンクするカテゴリIDが格納されます。データベースモデルが設計されたら、他の問題について質問してください。 –

+0

答えに@JohnJosephありがとう、3つのテーブルcustom_fields_valuesにカスタムフィールドの選択した値をどこに保存しますか? – user1859876

答えて

1

助けてくれてありがとう。

1)カテゴリテーブルの属性のようなJSONフィールドを作成します。そして基本的にそれにキー値の配列を格納します。それは、しかし、属性をクエリするときにいくつかの課題を提示します。私はそれの周りに方法があることを知っているが、私はそれを必要としなかったので、私は知らない。

2)カテゴリを作成するには、次にlaravelでカテゴリ属性モデルを作成し、カテゴリーが、その後

を多くのカテゴリーがあります属性hasManyの関係を定義し、この

cat_id - int 
key - varchar 
value - varchar 
Composite Index Unique on [cat_id, key,value ] 

のようなものになり、あなたのDB内のテーブルの属性あなたのカテゴリを照会すると、この

$categories = Category::whereHas('CategoryAttributes', function ($query) { $query->where('key', '=', 'color'); $query->where('value','=', 'blue'); })->get();

2

ような何かを行くだろうリレーショナルデータベースでEntity-Attribute-Value(EAV)モデルを実装する利点と欠点は、ほぼすべての他のフレームワークや言語を使用するLaravelと同じです。私はLaravelを使用することは本当に質問とは関係がないことは分かりません。

ユースケースがEAVの柔軟性を必要とし、追加の複雑さ(大きさの桁違い)を用意して、大きなパフォーマンスヒットに備えて準備されている場合...それらがブレーカーでない場合は、EAVモデル。

しかし、EAVの利点のいずれかを必要としない場合は、是非、欠点を避けてください。

+0

フィードバックと情報に感謝します – user1859876

関連する問題