我想打印查询:
$demo = Demo::find()->all();
我希望看到带有参数的转换SQL查询:
createCommand()->getRawSql();
正在向我显示错误消息:
yii2在非对象
上调用成员函数createCommand()
请帮我看看实际的SQL查询。
答案 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.html 和http://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()
对象(如
$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;