在yii中声明与分类器的MANY_MANY关系

时间:2014-07-23 11:46:59

标签: php database yii

假设我有以下数据库结构:

database schema 我有一个Classifier表,其中包含一个分类器类型列表,如“眼睛颜色”,“头发颜色”,“鞋子尺寸”等。它链接到Property表,其中包含属性列表对应于分类器。例如,头发类型blackbrown和{{1}可以有whiteredUS 8US 9鞋子尺寸。 US 10表以MANY_MANY方式链接到Person表。

当这样的结构在yii中声明时,

Property

我可以这样做:

'properties'=>array(self::MANY_MANY, 'Property', 'Xref(Person_id, Property_id)')

但我要找的是分别处理所有属性,例如 foreach ($person->properties as $property) { echo ($property->classifier->name.': '.$property->name); } $person->hairColor

当然,我可以用条件声明多个MANY_MANY关系(仅在Classifier_id上等于某个值)。但为此我需要事先了解所有分类器ID - 根本不灵活。

但有没有办法在yii中声明这种关系,以便自动解析分类器?因此,当我向$person->shoeSize表格添加新行时,例如Classifier以及buildslim等值时,我可以使用athletic而无需声明一个新的关系?

不仅如此,我还想在$person->build中使用这些内容,就像CDbCriteria一样,而不是将$my_criteria->compare('build.name', 'slim')Classifier_id和{{build对应的内容进行比较1}}与Property

1 个答案:

答案 0 :(得分:0)

您可以使用魔术__get()

在你的Person模型中(未经测试的代码抱歉):

public function __get($prop)
{
    if ($this->properties->hasAttribute($prop))
    {
        return $this->property->$prop;
    }

    return null;
    // or maybe better
    return parent::__get($prop);
}

请注意,重写CActiveRecords __get()可能是个问题,不建议这样做。你应该检查一下。