2011-01-30 1 views
2

나는 다음과 같은 테이블을했다 :Yii Framework에서 "has_one : through (from Rails)"와 같은 것이 있습니까?

manufacturers 
* id 
* name 
* description 

types 
* id 
* name 
* description 
* manufacturer_id 

cars 
* id 
* title 
* description 
* type_id 

이제 내 문제는 내가 유형과 manufacurers, 예와 함께 차를 나열 할됩니다 : 레일 내가 할 수에서

* Some Car, Fiat Punto 
* Another Car, Ferrari F1 

...

sth와 제조자 관계를 설정하십시오. 이렇게 :

class Car < ActiveRecord::Base 
    belongs_to :type 
    has_one :manufacturer, :through => :type 
end 

Yii에서도 가능합니까?

답변

2

"relations"함수를 사용하여 이와 같은 작업을 수행해야합니다. 도입 된 가장 좋은 페이지는 here을 찾을 수있는 ActiveRecord에 관한 것입니다.

자동차 간의 관계가 1 대 다수이기 때문에 유형은 "HAS_MANY"입니다.

예를 들어

(당신이 자동차와 제조업체 모델이 가정) :

자동차 :

public function relations() 
{ 
    return array('manufacturer' => array(self::BELONGS_TO, 'Manufacturer', 'manufacturerId')); 
} 

제조업체 : 당신은 다음에 대한 자동차의 배열을 가져올 수

public function relations() 
{ 
    return array('cars' => array(self::HAS_MANY, 'Car', 'manufacturerId')); 
} 

제조업체 :

foreach($oManufacturer->cars as $oManufacturer) 
    echo $oManufacturer->name; 
차를

는 :

echo $oCar->manufacturer->name; 

이 두 테이블이 manufacturerId들이었다 있다고 가정합니다. 호프 그게 도움이 :)

편집 : 당신은 두 모델에서 관계를 정의하는 의무가 없습니다. 예를 들어 자동차 제조업체가 필요하지 않다면 관계 함수를 정의하지 않아도됩니다.

+0

감사합니다. 그것은 또한 현재의 솔루션입니다 (유형 및 자동차에 manufacturer_id를 삽입하는 것). 그러나 자동차 테이블에 manufacturer_id가없는 관계를 만들 수 있습니까? – ipsum

+0

다른 유일한 해결책은 carId <> manufacturerId 항목을 포함하는 매핑 테이블을 만드는 것입니다. findByAttributes를 사용하여 자동차 나 제조업체를 먼저 찾고 실제 객체에 연결해야하므로 약간 더 많은 작업이 필요합니다. – Blizz