2015-07-21 40 views
3

我有查詢:獲取原始的SQL在Yii2

$popular = self::find() 
    ->from(self::tableName() . ' as t') 
    ->with('user'); 

當我嘗試打印SQL:

$popular->createCommand()->rawSql 

它給我:

SELECT * FROM "themes" "t" 

這樣我就可以得到充分的使用「加入」的原始查詢:

SELECT * FROM "themes" "t" LEFT JOIN "users" u ON u.user_id = t.author_id 

回答

2

已經回答了here

可以var_dumpActiveQuery情況下,像這樣生成的SQL:

var_dump($query->prepare(Yii::$app->db->queryBuilder)->createCommand()->rawSql); 

不過,我建議使用內置調試模型和麪板。

P.S.至於你的特定查詢 - with()不執行JOIN,而是執行額外的查詢和填充關係屬性與實際相關的記錄。要使用JOIN,您需要明確指定它,例如使用joinWith()

0

希望這將有助於

$query = new Query; 

$query  ->select(['themes.c1 AS d1', 'themes.c2 As d2..']) 

        ->from('themes') 

        ->leftJoin('users', 'users.user_id = themes.author_id'); 

$command = $query->createCommand(); 

$data = $command->queryAll(); 
+0

它將如何幫助? OP想要獲得SQL。 – arogachev