0

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

我有这些表:

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  |
+------------+-------+-------+-------+-------+

我无法理解常量是否适用于相关模型或当前模型,例如Module HAS_ONE Status,如果应该是status BELONGS_TO a Module

请注意,这BELONGS_TO确实有效,所以也许我是在回答自己,但我想就如何更好地理解关系提出一些建议,因为在 YII 指南示例中,auser HAS_ONE Profile和 不一样user HAS_ONE status吗?

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

非常感谢。

4

1 回答 1

1

您在两个模型中都错误地声明了关系,然后它给出了意想不到的结果。目前,您的代码所做的是从父表 ( Status) 中选择所有记录,无论它是否有子表 () Module,而不是相反。

当 FK 在 时Module, 不是Status, 它 应该 是

Module属于Status

StatusHAS_ONE Module(这是HAS_MANYwhereStatus最多有一个的特殊情况Module

我理解你的困惑,我认为它会帮助你理清思路的答案

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

于 2013-08-19T01:23:25.317 回答