1
我對yii相當陌生,當我閱讀「Web應用程序開發與Yii和PHP」一書時,我遇到了一個問題。CDbException外鍵的格式必須是「joinTable(fk1,fk2,...)」
本書第5章中的項目出現問題時,我在項目模型類中創建getUserOptions()方法的方法,該方法返回所選項目的有效用戶數組,並由用戶標識索引。
的表是:
tbl_user
CREATE TABLE `tbl_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) COLLATE utf8_bin NOT NULL,
`email` varchar(255) COLLATE utf8_bin NOT NULL,
`password` varchar(255) COLLATE utf8_bin NOT NULL,
`last_login_time` datetime DEFAULT NULL,
`create_time` datetime DEFAULT NULL,
`create_user_id` int(11) DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
`update_user_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
tbl_project
CREATE TABLE `tbl_project` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_bin NOT NULL,
`description` text COLLATE utf8_bin NOT NULL,
`create_time` datetime DEFAULT NULL,
`create_user_id` int(11) DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
`update_user_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
tbl_project_user_assignment
CREATE TABLE `tbl_project_user_assignment` (
`project_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
PRIMARY KEY (`project_id`,`user_id`),
KEY `fk_user_project` (`user_id`),
CONSTRAINT `fk_project_user` FOREIGN KEY (`project_id`) REFERENCES `tbl_project` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_user_project` FOREIGN KEY (`user_id`) REFERENCES `tbl_user` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
,最後它們各自的類中定義的關係如下:
// model Project
public function relations()
{
return array(
'issues' => array(self::HAS_MANY, 'Issue', 'project_id'),
'users' => array(self::MANY_MANY, 'User', '{{project_user_assignment}}(project_id, user_id'),
);
}
// model User
public function relations()
{
return array(
'issues' => array(self::HAS_MANY, 'Issue', 'requester_id'),
'issues1' => array(self::HAS_MANY, 'Issue', 'owner_id'),
'tblProjects' => array(self::MANY_MANY, 'Project', '{{project_user_assignment}}(user_id, project_id)'),
);
}
當我打電話getUserOptions()方法的格式如下:
<?php echo $form->dropDownList($model,'owner_id', $model->project->getUserOptions()); ?>
Yii中的CDbException返回一個錯誤,指出:
的關係 「用戶」 在活動記錄類「用戶」使用無效外鍵指定。外鍵的格式必須是「joinTable(fk1,fk2,...)」。
那麼我的代碼有什麼問題,我實際上是從書中寫的?
我期運用Yii的v.1.1.15和PHP v.5.4.19