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吗?我希望不是。如果是,那么 Magento 有自己的 EAV 映射方式,您不必重新发明它的方轮。它有适当的机制来做你想做的事情。

如果这是您可以控制的:您不希望按类型有单独的表。这是个坏主意。每个实体应该有一个 EAV 表,包含entityattributevalue列。对于 99% 的用例,attribute并且value可以是string列(PDO 将所有列值返回为string)。如果你想去类型疯狂(3D EAV)你可以强制attribute作为一个枚举,或一个实体特定属性表的外键。

对于活动记录类,创建一个关联$attributes数组属性,并在save()执行原子修剪和应用期间(删除数组中不存在的所有值,插入或替换所有存在的值)。如果您选择了(更简单的)string attribute路线,请为您的班级ArrayAccess提供修改$attributes以增加流畅度。您还可以通过跟踪是否对bool[] $attributeDiff属性进行了修改来优化保存。

于 2015-07-08T04:47:10.227 回答