¿Cómo puedo recuperar la consulta SQL sin procesar ejecutada en Laravel 3/4 usando Laravel Query Builder o Eloquent ORM?
Por ejemplo, algo como esto:
DB::table('users')->where_status(1)->get();
O:
(posts (id, user_id, ...))
User::find(1)->posts->get();
De lo contrario, como mínimo, ¿cómo puedo guardar todas las consultas ejecutadas en laravel.log?
Respuestas:
Laravel 4+
En Laravel 4 y versiones posteriores, debe llamar
DB::getQueryLog()
para obtener todas las consultas ejecutadas.O puede descargar un paquete de perfiles. Recomiendo barryvdh / laravel-debugbar , que es bastante bueno. Puede leer las instrucciones sobre cómo instalar en su repositorio .
Nota para los usuarios de Laravel 5: deberá llamar
DB::enableQueryLog()
antes de ejecutar la consulta. Ya sea justo encima de la línea que ejecuta la consulta o dentro de un middleware.Laravel 3
En Laravel 3, puede obtener la última consulta ejecutada de un
Eloquent
modelo que llama al método estáticolast_query
en laDB
clase.Sin embargo, esto requiere que habilite la
profiler
opción enapplication/config/database.php
. Alternativamente, podría, como se mencionó en @dualed, habilitar laprofiler
opción, enapplication/config/application.php
o llamarDB::profile()
para que todas las consultas se ejecuten en la solicitud actual y su tiempo de ejecución.fuente
ErrorException
: Advertencia:call_user_func_array()
espera que el parámetro 1 sea una devolución de llamada válida, la claseIlluminate\Database\MySqlConnection
no tiene un métodogetQueryList
.getQueryLog
. Lo arregló ahora. ¡Gracias!Puede habilitar el " Profiler " en Laravel 3 configurando
En tu
application/config/application.php
yapplication/config/database.php
Esto habilita una barra en la parte inferior de cada página. Una de sus características es enumerar las consultas ejecutadas y cuánto tiempo tomó cada una.
fuente
Para Eloquent solo puedes hacer:
Pero debe eliminar la parte "-> get ()" de su consulta.
fuente
Recomendaría usar la extensión de Chrome Clockwork con el paquete Laravel https://github.com/itsgoingd/clockwork . Es fácil de instalar y usar.
fuente
Como el generador de perfiles aún no está disponible en Laravel 4 , he creado esta función auxiliar para ver que se genera el SQL:
NOTA : establezca el indicador $ all en falso si solo desea la última consulta SQL.
Mantengo este tipo de funciones en una clase llamada DBH.php (abreviatura de Database Helper) para poder llamarlo desde cualquier lugar como este:
Aquí está la salida que obtengo:
En caso de que se lo pregunte, uso Kint para el formato dd (). http://raveren.github.io/kint/
fuente
if($all == false)
? ¿Por qué no simplemente?if(!$all)
Para Laraver 4 es
fuente
Aquí hay un fragmento rápido de Javascript que puede lanzar a su 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, lo que facilita la navegación por su sitio y ver qué consultas se ejecutan en cada página.
Cuando haya terminado de depurar, simplemente elimínelo de su plantilla.
fuente
DB::getQueryLog()
devuelve una matriz, no hay necesidad de rodearla con "".json_encode
lo traducirá en consecuencia.Laravel 5
Tenga en cuenta que este es el enfoque de procedimiento , que utilizo para la depuración rápida
en su encabezado, use:
El resultado se verá más o menos así (el archivo de registro predeterminado es laravel.log ):
*** Sé que esta pregunta especificó Laravel 3/4, pero esta página aparece cuando busco una respuesta general. Los novatos en Laravel pueden no saber que hay una diferencia entre las versiones. Como nunca veo
DD::enableQueryLog()
mencionado en ninguna de las respuestas que normalmente encuentro, puede ser específico de Laravel 5, tal vez alguien pueda comentar sobre eso.fuente
También puede escuchar eventos de consulta con esto:
Consulte la información de los documentos aquí en Escuchar eventos de consulta
fuente
El uso del registro de consultas no le proporciona la consulta RAW real que se está ejecutando, especialmente si hay valores vinculados. Este es el mejor enfoque para obtener el SQL sin procesar:
o más involucrado:
fuente
Si está utilizando Laravel 5, debe insertar esto antes de la consulta o en el middleware:
fuente
O como alternativa al perfilador laravel 3 puede usar:
https://github.com/paulboco/profiler o https://github.com/barryvdh/laravel-debugbar
fuente
en Laravel 4, en realidad puedes usar un Event Listener para consultas de bases de datos.
Coloque este fragmento en cualquier lugar, p
start/global.php
. Ej . Escribirá las consultas en el registro de información (storage/log/laravel.log
).fuente
ponlo en global.php registrará tu consulta sql.
fuente
El generador de perfiles SQL Loic Sharma admite Laravel 4, lo acabo de instalar. Las instrucciones se enumeran aquí . Los pasos son los siguientes:
"loic-sharma/profiler": "1.1.*"
en la sección requerida en composer.jsonphp composer.phar self-update
en la consola.php composer.phar update loic-sharma/profiler
en la consola también `'Profiler\ProfilerServiceProvider',
la matriz de proveedores en app.php'Profiler' => 'Profiler\Facades\Profiler',
la matriz de alias en app.phpphp artisan config:publish loic-sharma/profiler
en la consolafuente
Última consulta imprimir
fuente
L4 one-liner
(que consulta de escritura):
$q=\DB::getQueryLog();dd(end($q));
fuente
Laravel 3
Otra forma de hacer esto es:
Para todos los resultados de las consultas:
Para el último resultado:
fuente
Para obtener la última consulta ejecutada en laravel, utilizaremos la
DB::getQueryLog()
función de laravel para que devuelva todas las consultas ejecutadas. Para obtener la última consulta, utilizaremos laend()
función que devuelve la última consulta ejecutada.He tomado referencia de http://www.tutsway.com/how-to-get-the-last-executed-query-in-laravel.php .
fuente
Hay una manera muy fácil de hacerlo, desde su consulta laravel simplemente cambie el nombre de cualquier columna, le mostrará un error con su consulta .. :)
fuente