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라는 이름의 속성이 있습니다. 속성이 우선합니다. 관계에 다른 이름을 붙이십시오. (그리고 나서'name' 속성에 접근하여 실제 "Disabled"문자열을 얻습니다.) – DCoder
좋아요. 관계에서 status_name으로 바꿨고, var_dumping으로 with()와 함께 NULL을 돌려 주었습니까? – JorgeeFG
[query logging] (http://stackoverflow.com/questions/10629728/yii-how-to-print-sql-used-by-findall/10629915#10629915)을 활성화하고 생성 된 DB 쿼리를 살펴보십시오. 쿼리가 정확하다면, 디버거에서 코드를 단계적으로 수행하십시오 ... – DCoder