hacer - consoletvs laravel
Laravel 4 SQL log/console (8)
¿Hay algo similar en Laravel que le permita ver el SQL real que se está ejecutando? En Rails, por ejemplo, puede ver el SQL en la consola. En Django tienes una barra de herramientas.
¿Hay algo así en Laravel 4?
Para aclarar: Mi pregunta es cómo hacerlo sin código. ¿Hay algo incorporado en Laravel que no requiera que escriba código en la aplicación?
ACTUALIZACIÓN : Preferiblemente, también me gustaría ver consultas CLI (por ejemplo, php artisan migrate
)
Hay un paquete Composer para eso: https://packagist.org/packages/loic-sharma/profiler
Le dará una barra de herramientas en la parte inferior con consultas SQL, mensajes de registro, etc. Asegúrese de establecer la debug
en verdadero en su configuración.
Hago esto en Laravel 4.
Solo app/start/global.php
una vez en app/start/global.php
o en cualquier app/start/global.php
lugar, pero asegúrese de que esté cargado y luego comenzará a registrar todas sus consultas SQL.
Event::listen("illuminate.query", function($query, $bindings, $time, $name){
/Log::sql($query."/n");
/Log::sql(json_encode($bindings)."/n");
});
Se me ocurrió una forma muy simple (si está utilizando php artisan serve
y PHP 5.4): agréguelo a app/start/local.php
:
DB::listen(function($sql, $bindings, $time)
{
file_put_contents(''php://stderr'', "[SQL] {$sql} in {$time} s/n" .
" bindinds: ".json_encode($bindings)."/n");
});
pero esperando encontrar una solución más oficial.
Esto imprimirá sentencias SQL como esta:
[SQL] select 1 in 0.06s
Aquí hay otra buena opción de depuración para Laravel 4:
Aquí hay un fragmento de JavaScript rápido que puedes incluir en tu plantilla de página maestra. Siempre que esté incluido, todas las consultas se enviarán a la Consola JavaScript de su navegador. Los imprime en una lista fácil de leer, por lo que es sencillo navegar por su sitio y ver qué consultas se están ejecutando en cada página.
Cuando termine de depurar, simplemente elimínelo de su plantilla.
<script type="text/javascript">
var queries = {{ json_encode(DB::getQueryLog()) }};
console.log(''/****************************** Database Queries ******************************/'');
console.log('' '');
$.each(queries, function(id, query) {
console.log('' '' + query.time + '' | '' + query.query + '' | '' + query.bindings[0]);
});
console.log('' '');
console.log(''/****************************** End Queries ***********************************/'');
</script>
Si está utilizando Laravel 4, use esto:
$queries = DB::getQueryLog();
$last_query = end($queries);
Este código se toma directamente de otra fuente, pero quería facilitarlo ya que funcionó para mí en PHPStorm usando la ventana de mi terminal. Pude ver un registro completo pero, después de iniciar sesión, había algo de Sentry .
1.add
''log''=>true
dentro de su config/database.php
y debajo del lugar donde está el nombre de la base de datos ex.mysql
a continuación, agregue el código siguiente a routes.php
sobre todo no bajo ninguna configuración de ruta, ya que puede hacerlo bajo una configuración de ruta dada, pero solo verá cuando se llame a esa ruta.
para ver esta salida /goto / app/storage/log/somelogfile.log
if (Config::get(''database.log'', false))
{
Event::listen(''illuminate.query'', function($query, $bindings, $time, $name)
{
$data = compact(''bindings'', ''time'', ''name'');
// Format binding data for sql insertion
foreach ($bindings as $i => $binding)
{
if ($binding instanceof /DateTime)
{
$bindings[$i] = $binding->format(''/'Y-m-d H:i:s/''');
}
else if (is_string($binding))
{
$bindings[$i] = "''$binding''";
}
}
// Insert bindings into query
$query = str_replace(array(''%'', ''?''), array(''%%'', ''%s''), $query);
$query = vsprintf($query, $bindings);
Log::info($query, $data);
});
}
No te olvides de hacer punto de interrupción .... o hacer ping me :)
En la instancia de QueryBuilder hay un método paraSql () .
echo DB::table(''employees'')->toSql()
volvería:
select * from `employees`
Este es el método más fácil de mostrar las consultas.