在Yii2中获取原始sql

alm*_*one 4 yii2

我有查询:

$popular = self::find()
    ->from(self::tableName() . ' as t')
    ->with('user');
Run Code Online (Sandbox Code Playgroud)

当我尝试打印sql时:

$popular->createCommand()->rawSql
Run Code Online (Sandbox Code Playgroud)

它给了我:

SELECT * FROM "themes" "t"
Run Code Online (Sandbox Code Playgroud)

那么我可以使用"join"获得完整的原始查询:

SELECT * FROM "themes" "t" LEFT JOIN "users" u ON u.user_id = t.author_id
Run Code Online (Sandbox Code Playgroud)

aro*_*hev 7

它已在这里得到解答.

您可以var_dump为这样的ActiveQuery实例生成SQL :

var_dump($query->prepare(Yii::$app->db->queryBuilder)->createCommand()->rawSql);
Run Code Online (Sandbox Code Playgroud)

但是,我建议使用内置的调试模型和面板.

PS对于您的特定查询 - with()不执行JOIN,而是执行其他查询并使用实际相关记录填充关系属性.要使用JOIN,您需要明确指定它,例如joinWith().