Yii HAS_MANY与非外键和非主键的关系

时间:2014-11-20 03:40:16

标签: php mysql yii

我有以下代码:

        $country = CountryCodes::model()->with(
            [
                'country_subdivisions' => [
                     CountryCodes::HAS_MANY,
                    'CountrySubDivision',
                    ['country_subdivisions.iso2'=>'t.iso2']
                ]
            ]
        )->findByPk($id);
        $states = $country->country_subdivisions;

我有2个模型/表CountryCodes和CountrySubDivision。两个表都有iso2列。我想获得一个国家ID的相关细分。

我不确定为什么会出现以下错误:

关系" country_subdivisions"未在活动记录类中定义" CountryCodes"。

我是Yii Framework的新手,我使用的是Yii 1.1.x和php 5.6。

1 个答案:

答案 0 :(得分:0)

首先,您需要通过覆盖CountryCodes类中的relations()方法来定义关系。

public function relations() {
    $relations                 = [
        'country_subdivisions' => [
            CountryCodes::HAS_MANY,
            'CountrySubDivision',
            [
                'iso2'         => 'iso2'
            ]
        ]
    ];
    // merge with parents 
    return CMap::mergeArray(
        parent::relations(),
        $relations
    );
}

然后,你可以:

$country = CountryCodes::model()->with('country_subdivisions')->findByPk($id);
$states  = $country->country_subdivisions;