Yii简单的关系理解

时间:2013-08-18 23:46:03

标签: yii relational-database relationship

我在理解关系时遇到了问题。

我有这些表格:

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

非常感谢。

1 个答案:

答案 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/