您可以將執行的查詢記錄在應用程序日誌中並查看該腳本。像這樣的事情在配置文件:
'components' => array(
'db'=>array(
'enableParamLogging' => true,
),
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class'=>'CFileLogRoute',
'levels'=>'trace,log',
'categories' => 'system.db.CDbCommand',
'logFile' => 'db.log',
),
),
),
);
在某些情況下(例如運行測試時),你還需要調用Yii::app()->log->processLogs(null);
在過程結束這個工作。
當然,一旦你在那裏沒有任何東西阻止你編寫自己的日誌路由,它會在日誌消息中做一些不同的事情,但是請注意日誌在請求結束時處理(或者當您致電processLogs
時) ,不是每次你記錄一些東西。
順便說一句,你不應該直接在查詢建立這樣的查詢,動態輸入。使用綁定變量來代替:
$criteria = new CDbCriteria();
$criteria->condition = 't.date BETWEEN :from_date AND :to_date';
$criteria->params = array(
':from_date' => $from_date,
':to_date' => $to_date,
);
$criteria->with = array('order');
$orders = ProductOrder::model()->findAll($criteria);
似乎沒有直接sql命令的DAO比使用CDbcriteria更簡單/更快? – itachi
取決於你想對結果做什麼,我想。如果你想使用模型功能(例如驗證),使用AR是一個明顯的選擇。就個人而言,我更喜歡AR,並且只對更復雜的情況(如涉及加入的更新)留下DAO。這樣,我可以將模型範圍用於常見條件,並且在架構或業務邏輯更改時不必手動審查/更新所有直接命令。 (另外,在任何地方使用AR都意味着訪問結果中包含的數據的一致方式,而不必擔心結果行是對象還是數組......) – DCoder
明白了您的觀點。 thanx的解釋。 – itachi