2012-08-16 56 views
2

我到處找並且不可能找到一個答案,這令人困惑的問題..Yii的createCommand VS標準

我幾乎可以做所有的標準(儘管它可能看起來「壞」的代碼),因爲我可以做createCommand。

所以我的問題是:是有性能差異還是隻有兩種方法來獲得相同的結果?

+0

在我開發的應用程序中,createCommand要快得多,因爲它在膩子下運行; – 2012-08-16 14:02:49

回答

4

CDbCriteria & createCommand都是在Yii框架中創建查詢的方法。除此之外,您需要直接運行mysql查詢而不使用這種方式。

使用CDbCriteria創建複雜查詢非常簡單,而且比createCommand 更好,而您需要使用關係運行連接操作。

但是在性能的基礎上,createCommand比CDbCriteria更好,因爲CDbCriteria執行一些模式級別的查詢來獲取表列併爲每個表執行,並且每次我們使用CDbCriteria時執行。雖然createCommand直接執行mysql查詢,但不需要運行模式級別查詢。

當您開始緩存查詢而不是性能級別時,兩者幾乎相似。

關於CDbCriteria的一個更好的功能是它的關係查詢。所以我更喜歡使用CDbCriteria,讓我們以自己的方式處理查詢。

2

CDbCriteria恰好是一種(一般DAO)的功能封裝爲一些CDbConnection的。例如,在ActiveRecord模型中,大多數查詢函數(如find()和相似函數)都使用CDbCriteria對象來初始化CommandBuilder實例。這樣,在性能上存在實際差異,因爲使用CDb標準實際上需要執行一些php來生成db命令。但我必須說,這是毫無意義的;在reference告訴我們:

儘管Yii的DAO可以處理幾乎任何數據庫相關的任務,有機會,我們會花費90%的我們的時間以書面形式執行所常見的CRUD一些SQL語句(創建,讀取,更新和刪除)操作。與SQL語句混合時,維護代碼也很困難。爲了解決這些問題,我們可以使用Active Record。