我在理解关系时遇到了问题。
我有这些表格:
Modules
- name (pk)
- status_id (fk references status(id))
Status
- id (pk)
- name
因此,在模块I中声明关系:
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 |
+------------+-------+-------+-------+-------+
我很难理解常量是否适用于关系模型或当前模型,例如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
非常感谢。
答案 0 :(得分: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/