2016-02-09 50 views
5

我想在CakePHP的3.2上次執行的查詢,我已經用在CakePHP中2.X以下之前: -如何在CakePHP 3.2中獲取上次運行查詢?

function getLastQuery() { 
     Configure::write('debug', 2); 
     $dbo = $this->getDatasource(); 
     $logs = $dbo->getLog(); 
     $lastLog = end($logs['log']); 
     $latQuery = $lastLog['query']; 
     echo "<pre>"; 
     print_r($latQuery); 
    } 

我怎樣才能在CakePHP中3.X做呢?

+2

找到一個日誌文件,它可能在CakePHP中3.X多一點的工作,您可能需要使用自定義查詢記錄器CLA SS。我可以問一下你的實際使用案例,也就是你爲什麼需要訪問最後一個查詢? – ndm

+1

我在將數據保存到數據庫時遇到了一些問題,所以我需要它。 – sradha

回答

8

用簡單的英語,你所需要做的就是修改配置/ app.php

找到Datasources配置和設置'log' => true

'Datasources' => [ 
    'default' => [ 
     'className' => 'Cake\Database\Connection', 
     'driver' => 'Cake\Database\Driver\Mysql', 
     'persistent' => false, 
     'host' => 'localhost', 

     ... 

     'log' => true, // Set this 
    ] 
] 

如果你的應用程序處於調試模式,當您的頁面顯示SQ時,您將看到SQL查詢L錯誤。

配置/ app.php

找到Log配置和添加一個新的日誌類型:如果你沒有調試模式,您可以通過還增加了以下日誌的SQL查詢到一個文件:

'Log' => [ 
    'debug' => [ 
     'className' => 'Cake\Log\Engine\FileLog', 
     'path' => LOGS, 
     'file' => 'debug', 
     'levels' => ['notice', 'info', 'debug'], 
     'url' => env('LOG_DEBUG_URL', null), 
    ], 
    'error' => [ 
     'className' => 'Cake\Log\Engine\FileLog', 
     'path' => LOGS, 
     'file' => 'error', 
     'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'], 
     'url' => env('LOG_ERROR_URL', null), 
    ], 

    // Add the following... 

    'queries' => [ 
     'className' => 'File', 
     'path' => LOGS, 
     'file' => 'queries.log', 
     'scopes' => ['queriesLog'] 
    ] 
], 

你的SQL查詢,現在將寫入您可以在/logs/queries.log

0

已添加Database \ ConnectionManager :: get()。它代替了getDataSource()

繼Cookbook 3.0之後,您需要啓用Query Logging並選擇文件或控制檯日誌記錄。

use Cake\Log\Log; 

// Console logging 
Log::config('queries', [ 
    'className' => 'Console', 
    'stream' => 'php://stderr', 
    'scopes' => ['queriesLog'] 
]); 

// File logging 
Log::config('queries', [ 
    'className' => 'File', 
    'path' => LOGS, 
    'file' => 'queries.log', 
    'scopes' => ['queriesLog'] 
]); 

Cookbook 3.0 - Query Logging

+0

我無法使用它。請告訴我在哪裏可以保存這些代碼? – sradha

+0

@sradha,* et al。*:[配置'Log'應該在應用程序的引導階段完成。](http://book.cakephp.org/3.0/en/core-libraries/logging.html)請注意,查詢記錄在「調試」日誌級別,該級別默認在'app.default.php'中設置,以寫入LOGS目錄中的文件(在''Log'=> ['debug'=> [。 ..]],所以如果你至少將那部分複製到你自己的'app.php'中,那麼你所需要做的就是在你的數據庫配置中將'log'設置爲'true',或者調用'logQueries '(例如'ConnectionManager :: get('default') - > logQueries(true)')。 – Synexis