6
votes

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

2
Does this work Capsule::getQueryLog()?lukasgeiter
Which version of laravel you are using ?Eimantas Gabrielius
Capsule::getQueryLog() doesn't work. I'm not using Laravel, I'm using Eloquent within Zend Framework (1).Martyn
Does Questions::getConnection()->getQueryLog() work?patricus
Did you got anything working? trying to find the same!jtanmay

2 Answers

2
votes

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

1
votes

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);
}