如何在yii框架中向数据库显示所有查询

时间:2012-06-28 14:12:46

标签: yii

在CodeIgniter中,我会这样做:

print_r ($this->db->queries);

在Yii中我尝试过:

 print_r (Yii::app()->db)

但这并没有显示任何疑问。

更新: 我理解我的问题:当我想在POST动作上显示数据库查询时,我没有显示它。使用GET时,没关系。

3 个答案:

答案 0 :(得分:4)

正如@ bool.dev所说,您可以使用CWebLogRoute,或者在我的情况下,我使用CFileLogRoute将这些查询存储在文件中。

            array(
                'class'=>'CFileLogRoute',
                'categories'=>'system.db.*',
                'logFile'=>'sql.log',
            ),

答案 1 :(得分:0)

要补充@ snippLeaf-com的答案,您可以按照您想要的关键字跟踪此文件过滤:

// filter by "INSERT" or "UPDATE"
$ tail -f /path_to/protected/runtime/sql.log |grep 'INSERT\|UPDATE'

// filter (case insensitive) by "SELECT" in table "x2_users"
$ tail -f /path_to/protected/runtime/sql.log |grep -i SELECT.*x2_users

OBS:要获取新数据,您可能需要刷新数据库缓存:

rm -f protected/runtime/cache/*.bin

答案 2 :(得分:0)

如果您确实希望每个查询登录 yii ,请使用yii db profiler扩展名。

第1步。从-> link

下载扩展程序

第二步。解压到protected/extensions/

第3步。将文件夹名称yii-db-profiler-master重命名为db_profiler

第4步。将以下内容更新为您的protected/config/main.php

<?php
return array(
    // …
    'components' => array(
        // …
        'db' => array(
            // …
            'enableProfiling'=>true,
            'enableParamLogging' => true,
        ),
        'log'=>array(
            'class'=>'CLogRouter',
            'routes'=>array(
                    // …
                    array(
                        'class'=>'ext.db_profiler.DbProfileLogRoute',
                        'countLimit' => 1, // How many times the same query should be executed to be considered inefficient
                        'slowQueryMin' => 0.01, // Minimum time for the query to be slow
                    ),
            ),
        ),
    ),
);