0
這是我第一次在Yii中使用關係,問題很簡單。簡單的關係在YII中,無法完成
MODULE TABLE
name - PK
status - FK status_id
STATUS TABLE
id PK
name
所以,每個模塊都有一個狀態。
但我似乎無法得到它的工作。
Module.php(型號)
public function relations()
{
return array(
'status'=>array(self::BELONGS_TO, 'ModuleStatus', 'status'),
);
}
我訪問它們是這樣的:
$modulesAR = Module::model()->with('status')->findAll();
if($modulesAR)
{
foreach($modulesAR as $moduleAR)
{
$this->modules[ $moduleAR->name ] = array(
'sessionLimit' => isset($moduleAR->sessionLimit) ? $moduleAR->sessionLimit : 0,
'status' => isset($moduleAR->status) ? $moduleAR->status : 'disabled',
);
}
}
的var_dump(Yii的::應用程序() - >模塊 - >模塊;
array(3) {
["digidoc"]=>
array(2) {
["sessionLimit"]=>
int(0)
["status"]=>
string(1) "2" // Should say "Disabled"
}
["docusearch"]=>
array(2) {
["sessionLimit"]=>
int(0)
["status"]=>
string(1) "1" // Should say "Enabled"
}
["printbox"]=>
array(2) {
["sessionLimit"]=>
int(0)
["status"]=>
string(1) "2" // Should say "Disabled"
}
}
我將不勝感激
謝謝小號!
編輯:被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 |
+------------+-------+-------+-------+-------+
編輯2:
改變最後
ON (`status`.`id`=`t`.`name`);
到
ON (`status`.`id`=`t`.`status_id`);
按預期工作,我不知道如何解決它在Yii。
你的模型有一個叫做'status' *和*的關係名爲'status'.The財產將優先屬性。給你的關係一個不同的名字。 (然後訪問它的'name'屬性來獲取實際的「Disabled」字符串。) – DCoder
好吧我在關係中將其更改爲status_name,並在with()中用var_dumping將它改爲NULL,有什麼想法? – JorgeeFG
啓用[查詢日誌記錄](http://stackoverflow.com/questions/10629728/yii-how-to-print-sql-used-by-findall/10629915#10629915),查看生成的數據庫查詢。如果查詢正確,請在調試器中跳過代碼... – DCoder