2014-07-19 20 views
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

回答

1

噢,我的上帝...
的問題是缺少右括號中的「用戶」的定義有關項目的AR類,確切地說是CDbException指向的地方。

// 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'), 
    ); 
} 

'users' => array(self::MANY_MANY, 'User', '{{project_user_assignment}}(project_id, user_id)'), 

大家道歉我,如果我長的問題需要你,當然我的英語不好的任意時間。 :)

相關問題