1

PHP ActiveRecordのEAVテーブル構造でテーブルをリンクして、エンティティとそのすべての属性/値を取得できるようにするための最良の方法は何ですか?

テーブルの構造は次のようなものです。

person (entity)
personAttributes (attributes)
personAttributeVarchar (attribute values)
personAttributeText (attribute values)
personAttributeInt (attribute values)

この例は、EAVパターンのRubyアクティブレコードを使用して見つけました。これは、phpアクティブレコードを使用して複製できますか?

https://github.com/kostyantyn/example_active_record_as_eav/tree/master/app/models

4

1 に答える 1

0

それはマジェントの匂いですか?ないことを願っています。そうであれば、Magento には EAV をマッピングする独自の方法があり、四角い車輪を再発明する必要はありません。やろうとしていることを実行するためのメカニズムが用意されています。

これが制御できるものである場合: タイプごとに別々のテーブルを持ちたくありません。それは悪い考えです。エンティティごとにentityattribute、およびvalue列を含む 1 つの EAV テーブルが必要です。ユースケースの 99% で、列attributevalueすることができstringます (PDO はすべての列の値を として返しますstring)。タイプクレイジー(3D EAV)にしたい場合はattribute、列挙型、またはエンティティ固有の属性テーブルへの外部キーとして強制できます。

アクティブなレコード クラスに対して、連想$attributes配列プロパティを作成しsave()、アトミック プルーニング アンド 適用を実行します (配列に存在しないすべての値を削除し、存在するすべての値を挿入または置換します)。(より単純な)ルートを選択した場合は、流暢さを増すために変更string attributeするクラスを提供してください。プロパティで変更が行われたかどうかを追跡することで、保存をさらに最適化できます。ArrayAccess$attributesbool[] $attributeDiff

于 2015-07-08T04:47:10.227 に答える