關於yii的relations

太鬱悶了,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確實很靈活,可惜一直沒有一份詳細的開發手冊,導致很多時候要走不少彎路,希望以後手冊能夠更加完善起來吧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章