I've been trying to figure out a way to log SQL queries from Eloquent ORM which I'm using within Zend Framework 1. I came across getQueryLog() method called in this manner:
$queries = DB::getQueryLog();
I found Illuminate\\Database\\Connection to contain the getQueryLog() method so I tried to do the following:
use Illuminate\Database\Connection as DB;
class IndexController
{
.
.
.
public function indexAction()
{
// do stuff (e.g. fetch/update/create rows)
$questions = Questions::all()
.
.
$queries = DB::getQueryLog();
var_dump($queries); exit;
.
// render view
}
}
However, I get the following notice, and it returns NULL: Notice: Undefined property: IndexController::$queryLog in /var/www/qasystem/vendor/illuminate/database/Illuminate/Database/Connection.php on line 918 NULL
Can someone please suggest how I might use this outside of Laravel? I've searched online and can't see anything that I need to do different, although I suspect most examples will be used within Laravel. Also, is Illuminate\\Database\\Connection the correct class? Thanks
Use toSql
method instead. It will return you the final query command.
See How do I get the query builder to output its raw SQL query as a string? for more info
Even though a bit older- I just had the same issue, and using toSql()
wasn't helping me as I have many-to-many relations and Eloquent executed more queries.
Based on @patricus' comment I got it working like this:
function getTheThing() {
(new Thing())->getConnection()->enableQueryLog();
$thing = Thing::whereUid('something')
->with('AnotherThing')
->first();
$loggedSqls = (new Thing())->getConnection()->getQueryLog();
var_dump($loggedSqls);
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.