最近幾個月ThinkPHP更新頻繁,體現了頂想公司對這個核心框架的重視,所以個人覺得廣大PHP代碼的編寫者,應該對這個框架要有信心,筆者將原來開發的機房管理軟件的核心框架進行了升級,基本上沒有發現以前版本開發的代碼與新版存在兼容性的問題.
發現,升級后代碼加載的速度有所提高,于是我順便改了下關聯模型的使用,ThinkPHP已經支持多個數據表的模型關聯,可是我修改后,總是提示系統找不到關聯操作,具體提示為“Model:relation您所請求的方法不存在,”難道ThinkPHP不支持關聯查詢了,應該不會吧,于是從網上查找答案,發現了存在一個問題原來是實例化模型應該時有問題,我用了M()方法,于是改成了D()方法來實例化模型.
可程序運行還是提示“Model:relation您所請求的方法不存在!”仔細檢查,發現又存在一個問題,沒有繼承 RelationModel,于是將類改為class NewsModel extends RelationModel,代碼如下:
- class SetclassModel extends RelationModel{
- protected $_link = array(
- 'User'=> array(
- 'mapping_type'=>BELONGS_TO,
- 'class_name'=>'user',
- 'foreign_key'=>'uid',
- 'mapping_name'=>'user',
- 'mapping_fields'=>username,
- 'as_fields'=>'username',
- ),
- );
- }
Action代碼如下:
- $set=D('news');
- $list=$news->relation(true)->select();
- dump($list);//測試list數組
可運行后,問題還是依舊,都被這段小代碼快整瘋了,仔細檢查應該沒有什么問題,于是去掉->relation(true),將代碼改成如下:
- $set=D('news');
- $list=$news->select();
- dump($list);//測試list數組
又能正常出現 數據集了,于是又到網上搜查了一下具體情況,有人說不支持relation方法的操作了,終于有點灰心了.
后來仔細一想是不是大小寫的原因,據說ThinkPHP在linuxg下對大小寫有時很敏感,即使win也可能存在這樣的問題,可能和大小寫有關,仔細檢查,終于發現問題了,原來M方法實例化模型時首字母大寫與小寫均不會出現問題,D方法也是這樣,但是使用了關聯模型后,對大小寫即使在WIN環境下也有所區別了.
看來,以后寫代碼,還得養成規范的習慣,不可隨意亂寫,雖然WIN環境下對大小寫比較寬松,規范的語法還是便于閱讀,也更不容易出現這種莫名其妙的錯誤,減少許多不必要的麻煩.
新聞熱點
疑難解答
圖片精選