我正在尝试为基于Yii的简单网站创建数据库(使用MySQL)。它将包含一个商品目录,分为几个类别。想法是要有一种方法,可以添加针对每个类别的附加字段,并且这些字段应可填充类别中的每种商品。
例如,如果我具有“墙纸”类别,则它们应具有“颜色”,“脚注”,“外观”等附加字段。当然,对于每个墙纸项目,这些字段必须以不同的方式填充。
我为其创建了一个包含4个表的数据库:items(显然包含项),items_categories(具有针对therm的类别),items_fields(包含其他字段)和items_fields_values(用于多对多关系的支持表,其中还包含一个相关字段的值)。
我的数据库架构图 (您必须至少具有10个信誉才能附加图像)。
我正在使用Yii Framework,并以这种方式描述了模型中的关系:
物品模型:
return array(
'category' => array(self::BELONGS_TO, 'ItemCategory', 'category_id'),
'fields' => array(self::MANY_MANY, 'ItemField', 'items_fields_values(item_id, field_id)'),
);
ItemField模型:
return array(
'itemCategory' => array(self::BELONGS_TO, 'ItemCategory', 'item_category_id'),
'items' => array(self::MANY_MANY, 'Item', 'items_fields_values(field_id, item_id)'),
);
ItemCategory模型:
return array(
'items' => array(self::HAS_MANY, 'Item', 'category_id'),
'itemsFields' => array(self::HAS_MANY, 'ItemField', 'item_category_id'),
);
我应该如何定义这些关系,以便有一种方法可以输出,添加和编辑类别的字段,并将其值添加到特定项目?
您要描述的是一个EAV数据模型(实体属性值)。
扩展名可能会解决您访问数据的问题。看看https://github.com/yiiext/eav-behavior
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句