太鬱悶了,yii的relations裏self::BELONGS_TO默認是用當前指定的鍵跟關聯表的主鍵進行join,例如:
return array(
'reply' => array(self::BELONGS_TO, 'BookPostReply', 'postid'),
);
默認生成的sql是 on id = postid,id是BookPostReply的主鍵。
注:如果id不是BookPostReply表的真正主鍵,可以通過primaryKey在程序中設置
但今天我遇到的需求卻是需要生成 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確實很靈活,可惜一直沒有一份詳細的開發手冊,導致很多時候要走不少彎路,希望以後手冊能夠更加完善起來吧!