2013-08-18 55 views
0

理解關係時有問題。Yii簡單的關係理解

我有這些表:

Modules 
- name (pk) 
- status_id (fk references status(id)) 

Status 
- id (pk) 
- name 

所以在模塊我宣佈關係:

public function relations() 
{ 
    return array(
    'status'=>array(self::HAS_ONE, 'Status', 'status_id'), 
); 
} 

然而,這並不工作,每個狀態爲NULL。被Yii執行

查詢:

SELECT `t`.`name` AS `t0_c0`, `t`.`status_id` AS `t0_c1`, `t`.`session_limit` AS `t0_c2`, `status`.`id` AS `t1_c0`, `status`.`name` AS `t1_c1` FROM `ss_module` `t` LEFT OUTER JOIN `ss_module_status` `status` ON (`status`.`id`=`t`.`name`) 

+------------+-------+-------+-------+-------+ 
| t0_c0  | t0_c1 | t0_c2 | t1_c0 | t1_c1 | 
+------------+-------+-------+-------+-------+ 
| digidoc |  2 |  0 | NULL | NULL | 
| docusearch |  1 |  2 | NULL | NULL | 
| printbox |  2 |  0 | NULL | NULL | 
+------------+-------+-------+-------+-------+ 

我有一個問題的理解,如果常數適用於relationed模型或當前模型,例如Module HAS_ONE Status或者應該是status BELONGS_TO a Module

注意BELONGS_TO沒有工作,所以也許我回答自己,但我想就如何更好地理解關係中的一些建議,因爲在YII指南的例子,一個user HAS_ONE Profile,所以是不是一樣的user HAS_ONE status

http://www.yiiframework.com/doc/guide/1.1/en/database.arr#declaring-relationship

非常感謝。

回答

1

您已經錯誤地在兩種模型中聲明瞭關係,然後它給出了意想不到的結果。目前您的代碼所做的是從父表(Status)中選擇所有記錄,而不管它是否有子項(Module),而不是相反。

雖然FK是Module,不Status,它應該是

Module BELONG_TO Status

Status HAS_ONE Module(這是HAS_MANY特殊情況下Status至多有一個Module

我明白你的困惑,我認爲這會幫助你清除你的想法

http://www.yiiframework.com/wiki/181/relations-belongs_to-versus-has_one/

+0

我不明白的事實,STATUS有一個模塊,我的意思是一個模塊必須有一個狀態。但由於外鍵是在模塊表中,我認爲這使它成爲一個兒童,而不是父母,對吧? – JorgeeFG

+0

是的,就是這樣。目前,我從你的關係中看到,Module是小孩,但有父母的關係。兩種關係是不同的,它會完全不同地產生2個SQL查詢。我附上了參考資料,詳細解釋了它們之間的不同之處。 –