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ガイドの例ではuser HAS_ONE Profileuser 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、それは

ModuleBELONG_TOStatus

StatusHAS_ONE Module(これはHAS_MANYwhere Statushas at most oneの特殊なケースですModule)

戸惑う君の気持ちはわかった 心の整理になればいいなという答え

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

于 2013-08-19T01:23:25.317 に答える