【问题标题】:Print out a SQL single query (Yii 1.x)打印出一个 SQL 单一查询(Yii 1.x)
【发布时间】:2016-01-25 11:03:58
【问题描述】:

我有一个使用 CDbCriteria 生成的海量查询,如下所示:-

$schema = Yii::app()->db->schema;
$builder = $schema->commandBuilder;

// how to echo out this query?
$command = $builder->createFindCommand($schema->getTable('myuser'), $criteria);
$results = $command->queryAll();

我知道我可以使用 Yii 的“记录”功能来查看查询,是否可以只回显这个单个查询(而不是让 Yii 向我显示页面上正在运行的大量其他查询) .

【问题讨论】:

  • 我找到的最简单的方法是在 sql 中输入一个错字,它会抛出一个错误并且所有的 sql 都在屏幕上!

标签: php mysql yii yii-components


【解决方案1】:

您可以使用$command->text 打印由查询生成器构建的查询。 在您的示例代码中将是:

    $schema = Yii::app()->db->schema;
    $builder = $schema->commandBuilder;
    $criteria = new CDbCriteria();
    $command = $builder->createFindCommand($schema->getTable('name_of_table'), $criteria);
    $results = $command->text;
    echo $results;

$command->text 将返回您的完整查询文本

【讨论】:

  • @Zabs 绝对高兴 :)
  • 如果我在$command->text 中添加$criteria->with = ['relation'];,我看不到JOIN。我如何在这里使用with
【解决方案2】:

将此添加到您的配置文件中。您可以看到查询和其他详细信息 在页面底部。

'db'=>array(
        'enableProfiling'=>true,
        'enableParamLogging' => true,
),
'log'=>array(
    'class'=>'CLogRouter',
    'routes'=>array(
        …
        array(
            'class'=>'CProfileLogRoute',
            'levels'=>'profile',
            'enabled'=>true,
        ),
    ),
),

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多