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

如何从yii2查询打印转换后的SQL查询,yii2,Yii2,我要打印查询: $demo = Demo::find()->all(); 我想查看已转换的SQL查询及其参数: createCommand()->getRawSql(); 正在向我显示错误消息: yii2对非对象上的成员函数createCommand()的调用 请帮助我查看实际的SQL查询。一个简单的方法是使用活动查询生成器createCommand方法 $sqlCommand = Demo::find()->createCommand(); echo $sqlC

我要打印查询:

$demo = Demo::find()->all();
我想查看已转换的SQL查询及其参数:

createCommand()->getRawSql();
正在向我显示错误消息:

yii2对非对象上的成员函数createCommand()的调用


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

一个简单的方法是使用活动查询生成器createCommand方法

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

  echo $sqlCommand->sql;
见此参考 和

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;
返回非实际sql的所有模型的数组

如果您想要sql,请使用此(这是超出的sql)

例如:


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

Demo::find()->select('nonExistingField')->all();
并查看如下调试消息:

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

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

最短的方法可能是:

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

此问题已得到回答否链接中的queston和asnwer与此问题无关..它向我显示了一条错误消息“调用非对象上的成员函数createCommand()”请确保Demo::Find()是有效的对象。。而且你有权。。最终更新您的问题并显示您的代码。。在何处使用此语句是,Demo::find()->all();返回对象的数组。我在模型类的方法中使用这个查询,您不应该使用Demo::find()->all();但是Demo::find()->createCommand()。。如果要查看结果查询,必须将all()替换为createComman()。。Demo::find()->all();返回行模型对象,而不是检索此行的sql指令
Demo::find()->select('nonExistingField')->all();
The SQL being executed was: SELECT `nonExistingField` ...
echo Demo::find()->createCommand()->rawSql;