Php 在yii中声明与分类器的多个关系
假设我有以下数据库结构: 我有一个Php 在yii中声明与分类器的多个关系,php,database,yii,Php,Database,Yii,假设我有以下数据库结构: 我有一个分类器表,其中包含一个分类器类型列表,如“眼睛颜色”、“头发颜色”、“鞋子大小”等。它链接到属性表,该表具有与分类器对应的属性列表。例如,对于头发类型,黑色,棕色,白色和红色,对于鞋码,美式8,美式9,以及美式10。Person表以多种方式链接到属性表 当这个结构在yii中声明时,就像这样 'properties'=>array(self::MANY\u MANY,'Property','Xref(Person\u id,Property\u id) 我可以这
分类器
表,其中包含一个分类器类型列表,如“眼睛颜色”、“头发颜色”、“鞋子大小”等。它链接到属性
表,该表具有与分类器对应的属性列表。例如,对于头发类型,黑色
,棕色
,白色
和红色
,对于鞋码,美式8
,美式9
,以及美式10
。Person
表以多种方式链接到属性
表
当这个结构在yii中声明时,就像这样
'properties'=>array(self::MANY\u MANY,'Property','Xref(Person\u id,Property\u id)
我可以这样做:
foreach ($person->properties as $property) {
echo ($property->classifier->name.': '.$property->name);
}
但是我想要的是分别处理所有属性,比如$person->hairColor
或$person->shoeSize
当然,我可以用一个条件声明多个多个关系(仅在分类器id等于某个值时)。但为此,我需要事先知道所有分类器ID——一点也不灵活
但是有没有一种方法可以用yii声明这个关系,从而自动解析分类器呢?因此,当我向分类器
表添加新行时,比如说,build
和slim
或athletic
等值,我可以只使用$person->build
,而不声明新的关系
不仅如此,我想在
CDbCriteria
中使用它们,比如$my_-criteria->compare('build.name','slim')
,而不是将分类器id
与build
对应的内容和属性
与'slim'/p>相比较。您可以使用神奇的\uu-get()
实现这一点:
在您的个人模型中(未测试代码):
请注意,重写CActiveRecords _get()可能会有问题,不建议这样做。您应该检查一下。谢谢,这是一个开始。但是,当与CDbCriteria一起使用时,这可能不起作用。我会更新这个问题。
public function __get($prop)
{
if ($this->properties->hasAttribute($prop))
{
return $this->property->$prop;
}
return null;
// or maybe better
return parent::__get($prop);
}