Como recuperar a consulta SQL executada bruta no Laravel 3/4 usando o Laravel Query Builder ou Eloquent ORM?
Por exemplo, algo como isto:
DB::table('users')->where_status(1)->get();
Ou:
(posts (id, user_id, ...))
User::find(1)->posts->get();
Caso contrário, no mínimo, como posso salvar todas as consultas executadas no laravel.log?
Respostas:
Laravel 4+
No Laravel 4 e posterior, você precisa ligar
DB::getQueryLog()
para obter todas as consultas executadas.Ou você pode baixar um pacote de criação de perfil. Eu recomendaria barryvdh / laravel-debugbar , o que é bastante legal. Você pode ler para obter instruções sobre como instalar em seu repositório .
Nota para usuários do Laravel 5: você precisará ligar
DB::enableQueryLog()
antes de executar a consulta. Logo acima da linha que executa a consulta ou dentro de um middleware.Laravel 3
No Laravel 3, você pode obter a última consulta executada de um
Eloquent
modelo que chama o método estáticolast_query
naDB
classe.Isso, no entanto, requer que você ative a
profiler
opçãoapplication/config/database.php
. Como alternativa, você pode, como mencionado anteriormente, ativar aprofiler
opção entrarapplication/config/application.php
ou ligarDB::profile()
para que todas as consultas sejam executadas na solicitação atual e no tempo de execução.fonte
ErrorException
: Aviso:call_user_func_array()
espera que o parâmetro 1 seja um retorno de chamada válido, a classeIlluminate\Database\MySqlConnection
não tem um métodogetQueryList
.getQueryLog
. Corrigido agora. Obrigado!Você pode ativar o " Profiler " no Laravel 3 configurando
No seu
application/config/application.php
eapplication/config/database.php
Isso permite uma barra na parte inferior de cada página. Uma de suas características é listar as consultas executadas e quanto tempo cada uma delas levou.
fonte
Para o Eloquent, você pode apenas fazer:
Mas você precisa remover a parte "-> get ()" da sua consulta.
fonte
Eu recomendaria o uso da extensão Clockwork do Chrome com o pacote Laravel https://github.com/itsgoingd/clockwork . É fácil de instalar e usar.
fonte
Como o criador de perfil ainda não saiu do Laravel 4 , criei esta função auxiliar para ver o SQL sendo gerado:
NOTA : Defina o sinalizador $ all como false se você quiser apenas a última consulta SQL.
Eu mantenho esse tipo de função em uma classe chamada DBH.php (abreviação de Database Helper) para que eu possa chamá-lo de qualquer lugar como este:
Aqui está a saída que recebo:
Caso você esteja se perguntando, eu uso o Kint para a formatação dd (). http://raveren.github.io/kint/
fonte
if($all == false)
? Por que não simplesmenteif(!$all)
Para o Laraver 4 é
fonte
Aqui está um snippet rápido de Javascript que você pode lançar no seu modelo de página principal. Desde que incluído, todas as consultas serão exibidas no console Javascript do seu navegador. Ele os imprime em uma lista de fácil leitura, facilitando a navegação pelo site e ver quais consultas estão sendo executadas em cada página.
Quando você terminar de depurar, basta removê-lo do seu modelo.
fonte
DB::getQueryLog()
retorna uma matriz, não há necessidade de cercá-la com "".json_encode
irá traduzi-lo de acordo.Laravel 5
Observe que esta é a abordagem processual , que eu uso para depuração rápida
no seu cabeçalho, use:
A saída será mais ou menos assim (o arquivo de log padrão é laravel.log ):
*** Eu sei que esta pergunta especificou o Laravel 3/4, mas esta página aparece ao procurar uma resposta geral. Os iniciantes no Laravel podem não saber que há uma diferença entre as versões. Como eu nunca vi
DD::enableQueryLog()
mencionado em nenhuma das respostas que normalmente encontro, pode ser específico para o Laravel 5 - talvez alguém possa comentar sobre isso.fonte
Você também pode ouvir eventos de consulta usando este:
Consulte as informações dos documentos aqui em Listening For Query Events
fonte
O uso do log de consulta não fornece a consulta RAW real em execução, especialmente se houver valores associados. Esta é a melhor abordagem para obter o sql bruto:
ou mais envolvidos:
fonte
Se você estiver usando o Laravel 5, precisará inseri-lo antes da consulta ou no middleware:
fonte
Ou como alternativa ao laravel 3 profiler, você pode usar:
https://github.com/paulboco/profiler ou https://github.com/barryvdh/laravel-debugbar
fonte
no Laravel 4, você pode realmente usar um Event Listener para consultas ao banco de dados.
Coloque esse trecho em qualquer lugar, por exemplo, dentro
start/global.php
. Ele gravará as consultas no log de informações (storage/log/laravel.log
).fonte
coloque-o em global.php, ele registrará sua consulta sql.
fonte
O perfilador Loic Sharma SQL suporta o Laravel 4, eu o instalei. As instruções estão listadas aqui . Os passos são os seguintes:
"loic-sharma/profiler": "1.1.*"
na seção requerer em composer.jsonphp composer.phar self-update
no console.php composer.phar update loic-sharma/profiler
no console também `'Profiler\ProfilerServiceProvider',
a matriz do provedor em app.php'Profiler' => 'Profiler\Facades\Profiler',
a matriz de aliasses em app.phpphp artisan config:publish loic-sharma/profiler
no consolefonte
Última consulta impressa
fonte
Liner L4
(que consulta de gravação):
$q=\DB::getQueryLog();dd(end($q));
fonte
Laravel 3
Outra maneira de fazer isso é:
Para todos os resultados das consultas:
Para o último resultado:
fonte
Para obter a última consulta executada no laravel, usaremos a
DB::getQueryLog()
função laravel, que retornará todas as consultas executadas. Para obter a última consulta, usaremos aend()
função que retorna a última consulta executada.Tomei referência em http://www.tutsway.com/how-to-get-the-last-executed-query-in-laravel.php .
fonte
Existe uma maneira muito fácil de fazer isso: a partir da sua consulta laravel basta renomear qualquer nome de coluna, isso mostrará um erro na sua consulta .. :)
fonte