我试图为一个简单的基于Yii的网站创建一个数据库(使用MySQL)。它将包含一个带有商品的目录,这些商品分为几个类别。我们的想法是提供一种方法来添加特定于每个类别的其他字段,并且这些字段应该可以为类别中的每个商品填写。
例如,如果我有一个类别'壁纸',他们应该有其他字段' color','镜头'' facture&#39 ;当然,对于每个壁纸项目,这些字段必须以不同方式填充。
我为它创建了一个包含4个表的数据库: items (显然包含项目), items_categories (包含therm的类别), items_fields (包含其他字段)和 items_fields_values (多对多关系的支持表,其中还包含相关字段的值)。
My database schema diagram (您需要至少有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'),
);
我应该如何定义这些关系,以便能够输出,添加和编辑类别及其值到特定项目的字段?
答案 0 :(得分:0)
您所描述的是EAV数据模型(实体 - 属性 - 值)。
扩展程序可能会解决您访问数据的问题。看看https://github.com/yiiext/eav-behavior