yii的relations里self::BELONGS_TO默認是用當前指定的鍵跟關聯表的主鍵進行join,例如:
return array( 'reply' => array(self::BELONGS_TO, 'BookPostReply', 'postid'), );
默認生成的sql是 on id = postid,id是BookPostReply的主鍵。
但今天我遇到的需求卻是需要生成 on BookPostReply.postid = t.postid,不去關聯主鍵,而且關聯其中一個字段的值,怎么搞都搞不定,論壇也翻了個遍,不得不說,yii的論壇搜索功能真的很爛,每次用都要從一 堆的內容里過濾信息,還不見的能找到自己想要的,而且手冊也比較簡單,對這些東西沒有做比較深入的解答。
后來無意中看到有個on的屬性,剛好跟sql里的on一樣,於是抱着試試的想法,在配置里加了上去
return array( 'reply' => array(self::BELONGS_TO, 'BookPostReply', 'postid', 'on' => 't.postid=reply.postid'), );
看調試信息里的SQL語句,發現yii生成了一條 on id = postid and t.postid=reply.postid 這樣的語句,看到這就已經明白這個東西的作用了,於是將postid清空,改成如下:
return array( 'reply' => array(self::BELONGS_TO, 'BookPostReply', '', 'on' => 't.postid=reply.postid'), );
終於將默認的on重置掉了^_^,yii確實很靈活,可惜一直沒有一份詳細的開發手冊,導致很多時候要走不少彎路,希望以后手冊能夠更加完善起來吧!