2011-01-30 30 views
2

我有以下表格:在Yii框架中是否有像“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 

...

在铁轨我可以与制造商建立关系。像这样:

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

这在Yii中也是可行的吗?

回答

2

你必须使用“关系”功能来完成这样的事情。要介绍的最好的网页是关于ActiveRecord的网页,你可以找到here

由于汽车之间的关系是一对多的类型将是“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; 

这假定两个表都有制造商标识。 希望帮助:)

编辑:你没有义务在两个模型中定义关系。例如,如果你不需要汽车制造商,那么在这里不定义关系函数是完全可以的。

+0

谢谢。这也是我目前的解决方案(将manufacturer_id插入类型和汽车中)。但是,在汽车表中没有manufacturer_id的情况下可以创建关系吗? – ipsum 2011-01-30 20:15:07