2013-08-18 56 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查询。我附上了参考资料,详细解释了它们之间的不同之处。 –