2014-11-20 3 views
0

와 YII HAS_MANY 관계 I 후속 코드가 있습니다비 외래 키 및 비 기본 키

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

내가 두 모델/테이블 CountryCodes을 가지고 CountrySubDivision을. 두 표 모두 iso2 열을가집니다. ID별로 국가 별 관련 세부 분류를 가져오고 싶습니다.

나는 왜 다음과 같은 오류를 얻고있다 확실하지 않다 :

관계 "country_subdivisions을"액티브 레코드 클래스 "CountryCodes"에 정의되어 있지 않습니다.

나는 Yii Framework의 초보자이며 Yii 1.1.x와 php 5.6을 사용하고 있습니다.

답변

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; 
+0

덕분에, 지금은 매력처럼 작동합니다. 내 클래스 계층 구조는 다음과 같습니다. BaseCountryCode -CountryCodes 기본 클래스에 내 릴레이션 메소드를 넣었습니다. 나는 공공 기능 "관계"가 어린이 수업에 액세스 할 수 있다고 생각했다. 그것은 작동하지 않았다. 그래서 위 구문을 사용하려고 시도했다. – sdhakal

+0

@sdhakal BaseCountryCode 클래스에서 관계를 정의하면 CountryCodes 클래스에서 parent :: relations() 만 반환하면됩니다. like
공개 함수 관계() { parent :: relations(); } – turutosiya

+0

그래, 사실, 나는 똑같이 완벽하게 잘 작동 .. 감사합니다 Logged – sdhakal