Come ottenere in SQL string la query da una Query Builder in Laravel? In questo articolo scopriamo il processo da seguire poter fare ciò.
Ciao mi chiamo Lorenzo Neri e sono un informatico: realizzo contenuti per aiutare le persone a padroneggiare l’arte del nuovo millennio, ovvero l’informatica!
Hai il tuo Query Builder all’interno del nostro file PHP implementato seguendo la logica di Laravel e se sei qui è perché ti stai chiedendo come ottenere in output da esso, la query equivalente in SQL e in formato stringa.
Permettimi di farti un esempio molto semplice:
DB::table('utenti')->get();
Il Query Builder in questo caso, con la funzione get, ci permette di eseguire la query SQL papale papale qua sotto:
SELECT * FROM utenti
Per ottenerla in formato stringa, puoi seguire due strade in base a ciò che vuoi ottenere.
Query nuda e cruda a schermo
Se desideri ottenere la query in SQL e stamparla a schermo, puoi usare queste funzionalità all’interno di Laravel:
DB::enableQueryLog();
dd(DB::getQueryLog());
Queste due righe di codice vanno eseguite A SEGUITO dell’esecuzione della query di cui vuoi ottenere il SQL in formato string.
La prima riga, ti permette di eseguire il log delle query.
La seconda, ti permette di mostrarti il log stesso: fra cui anche la famosa query eseguite dal Query Builder stesso.
Ma la seconda strada? Ci arriviamo.
Ottenere in SQL string la query ma in formato “variabile”
Ciò che ti ho mostrato prima ti fa una stampa a video completa di tutto.
Se desideri prenderti la query come variabile vera e propria, ti suggerisco di fare così:
$queryStringa = dd[0]["query"];
echo $queryStringa; // mostrerà a video "select * from utenti"
Un modo molto pratico e semplice per ottenere le query fatte e finite, come si direbbe in inglese e scritto prima in “Raw SQL String” al di fuori del Query Builder.
Ma prima di salutarti, ti vorrei mostrare un’altra strada.
Ottenere il SQL nudo e crudo da un metodo “built-in”
Query Builder come classe permette di usare un metodo “built-in” ancora più diretto di quanto abbiamo visto prima.
Per intenderci, cosa ci può essere di più semplice di un “toSql”? Ecco…
$queryStringa = DB::table('utenti')->toSql();
Ti lascio scoprire cosa mai conterrà la variabile “$queryStringa” 😉