如何从yii2查询打印转换后的SQL查询

时间:2016-11-10 07:40:18

标签: yii2

我想打印查询:

$demo = Demo::find()->all();

我希望看到带有参数的转换SQL查询:

createCommand()->getRawSql();

正在向我显示错误消息:

  

yii2在非对象

上调用成员函数createCommand()

请帮我看看实际的SQL查询。

6 个答案:

答案 0 :(得分:23)

例如:

$query = Demo::find()->where(['category'=>2]);
echo $query->createCommand()->getRawSql();

答案 1 :(得分:2)

一种简单的方法是使用Active Query Builder createCommand方法

  $sqlCommand = Demo::find()->createCommand();

  echo $sqlCommand->sql;

请参阅此参考资料http://www.yiiframework.com/doc-2.0/yii-db-activequery.htmlhttp://www.yiiframework.com/doc-2.0/yii-db-activequery.html#createCommand()-detail

答案 2 :(得分:2)

$demo = Demo::find()->all();

返回所有模型的数组,而不是实际的sql。

如果你想让sql使用它(这是sql,那就是了)

$query = Demo::find()->where('1');
var_dump($query->prepare(Yii::$app->db->queryBuilder)->createCommand()->rawSql)

答案 3 :(得分:1)

Hiii Paritosh,
您可以通过yii\db\Connection::createCommand()对象(如

)查看以SQl格式执行的查询
$query = new \yii\db\Query;
        $query->select(['*'])
                ->from('table_demo');

        $command = $query->createCommand();

//      $command->sql returns the actual SQL
        $rows = $command->sql;
        echo $rows;
        exit;

答案 4 :(得分:0)

最简单的方法是选择一些不存在的字段,例如:

Demo::find()->select('nonExistingField')->all();

并查看如下调试消息:

The SQL being executed was: SELECT `nonExistingField` ...

这样,您就不需要删除您的 ->all() 或 ->one() 调用。

答案 5 :(得分:0)

最短的方法大概是:

echo Demo::find()->createCommand()->rawSql;