我正在尝试使用动态表字段构建应用。这个想法是管理员可以在不改变MySQL表的情况下定义每个项目的哪些字段可用。
在字段中输入的数据应该是各种类型,例如文本,货币和布尔值,因此可以添加像$这样的后缀或显示布尔图像。还应将字段分配给组(在HTML字段集中将它们分开)。最后一个项目每个字段有一个值。
我希望项目的添加和编辑表单能够显示每个可能的字段。
我是对的,我需要以下型号:
Item
(hasMany Value)Field
(belongsTo FieldGroup& FieldType(也有多个值?))FieldGroup
(hasMany Field)FieldType
(hasMany Field)Value
(belongsTo Item& Field)得到我需要的东西?
我真的不知道怎么做的部分:每个项目只允许有一个值,但因为模型Item
有多个值,所以可以有多个。
我如何在Item中将带有组和类型的字段添加到表单中?我正在尝试使用loadModel('Group');
(正确?)然后将数组$fieldsByGroups = $this->Group->find('all')
分配给添加/编辑模板并执行foreach($fieldsByGroups)
以创建表单输入。这是一种合适的方法吗?
“值”表有4个字段:id
,item_id
,field_id
,value
(我在wordpress表结构中看到的LongText。我不需要不同一些eav-articles中建议的每个FieldType的表(其中没有一个是我需要的))。基本上我不需要id
,但我认为CakePHP需要一个primaryKey,并且无法处理item_id
和field_id
的索引。
感谢,
曼努埃尔
答案 0 :(得分:1)
我最近在行为中构建的解决方案将使用模型CustomField
来描述整个模型上的全局或该模型中的特定记录的额外字段。我还会在每个模型上都有一个名为custom_fields
的文本字段,它使用了存储带有自定义字段数据的json数组的行为。
之后我只添加了一些回调魔法,以便在我查询时以正确的格式输出自定义字段,并将自定义字段保存为正常字段。
这是我制作的快速简便的解决方案,但如果您将此作为应用程序的核心部分,则应考虑查看No-SQL数据库。 CakePHP有一个很好的数据源可以在http://github.com/ichikaway/cakephp-mongodb
与MongoDB一起使用