Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在yii中声明与分类器的多个关系_Php_Database_Yii - Fatal编程技术网

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);
}