Vai al contenuto
Home » Laravel Query Builder: come ottenere la query SQL sotto forma di stringa per il debugging

Laravel Query Builder: come ottenere la query SQL sotto forma di stringa per il debugging

Il costruttore di query di Laravel è un potente strumento per la creazione di query SQL. Tuttavia, durante lo sviluppo, può essere utile stampare la query SQL raw generata dal costruttore di query per il debugging o per l’ottimizzazione delle query. In questo articolo, ti mostreremo come ottenere la query SQL raw sotto forma di stringa dal costruttore di query in Laravel.

Utilizzo di toSql()

Il modo più semplice per stampare la query SQL raw generata dal costruttore di query in Laravel è utilizzare il metodo toSql(). Esempio:

$users = DB::table('users')->get();

$sql = DB::table('users')->toSql();

dd($sql);

Questo metodo restituirà la query SQL raw generata dal costruttore di query, senza eseguirla effettivamente.

Utilizzo di dd()

Un’altra opzione è utilizzare la funzione dd() fornita da Laravel. La funzione dd() stampa la query SQL raw generata dal costruttore di query e interrompe l’esecuzione dello script. Esempio:

$users = DB::table('users')->get();

dd(DB::getQueryLog());

Utilizzo di getQueryLog()

Infine, è possibile utilizzare il metodo getQueryLog() per ottenere la query SQL raw generata dal costruttore di query in Laravel come un array. Esempio:

$users = DB::table('users')->get();

$queries = DB::getQueryLog();

foreach ($queries as $query) {
    $sql = $query['query'];
    $bindings = $query['bindings'];
    $time = $query['time'];
    // do something with the query
}

Questo è utile se si vuole lavorare con le query SQL grezze in modo più dettagliato, ad esempio per creare un registro delle query.

Utilizzo di Debugbar

Se stai utilizzando Debugbar come tool di debug, è ancora più semplice stampare la query SQL raw generata dal costruttore di query. Debugbar integra una scheda “SQL” che mostra tutte le query SQL eseguite durante la richiesta. In questa scheda è possibile vedere la query SQL raw, il tempo di esecuzione e i parametri di binding.

Utilizzo di un metodo Custom

Questo è il mio metodo preferito, perchè stampa la stringa esatta da eseguire su mysql. Va applicato come helper a un query builder. Esempio:

function getSQL($builder)
{
    $sql = $builder->toSql();
    foreach ($builder->getBindings() as $binding) {
        $value = is_numeric($binding) ? $binding : "'" . $binding . "'";
        $sql = preg_replace('/\?/', $value, $sql, 1);
    }
    return $sql;
}

Conclusione

Stampare la query SQL raw generata dal costruttore di query in Laravel può essere utile per il debugging o per l’ottimizzazione delle query. Esistono diversi metodi per ottenere la query SQL raw come stringa, tra cui utilizzare il metodo toSql(), la funzione dd(), il metodo getQueryLog() e Debugbar. Scegli il metodo che meglio si adatta alle tue esigenze e utilizzalo per migliorare la tua esperienza di sviluppo.