Comment puis-je récupérer la requête SQL exécutée brute dans Laravel 3/4 à l'aide de Laravel Query Builder ou Eloquent ORM?
Par exemple, quelque chose comme ceci:
DB::table('users')->where_status(1)->get();
Ou:
(posts (id, user_id, ...))
User::find(1)->posts->get();
Sinon, comment puis-je au moins enregistrer toutes les requêtes exécutées dans laravel.log?
Réponses:
Laravel 4+
Dans Laravel 4 et versions ultérieures, vous devez appeler
DB::getQueryLog()
pour obtenir toutes les requêtes exécutées.Ou vous pouvez télécharger un package de profileur. Je recommanderais barryvdh / laravel-debugbar , qui est plutôt chouette . Vous pouvez lire pour obtenir des instructions sur la façon d'installer dans leur référentiel .
Remarque pour les utilisateurs de Laravel 5: vous devrez appeler
DB::enableQueryLog()
avant d'exécuter la requête. Soit juste au-dessus de la ligne qui exécute la requête, soit à l'intérieur d'un middleware.Laravel 3
Dans Laravel 3, vous pouvez obtenir la dernière requête exécutée à partir d'un
Eloquent
modèle appelant la méthode statiquelast_query
sur laDB
classe.Cependant, cela nécessite que vous activiez l'
profiler
option dansapplication/config/database.php
. Vous pouvez également, comme @dualed l'a mentionné, activer l'profiler
option, inapplication/config/application.php
or callDB::profile()
pour que toutes les requêtes soient exécutées dans la requête actuelle et leur heure d'exécution.la source
ErrorException
: Attention:call_user_func_array()
s'attend à ce que le paramètre 1 soit un rappel valide, la classeIlluminate\Database\MySqlConnection
n'a pas de méthodegetQueryList
.getQueryLog
. Corrigé maintenant. Merci!Vous pouvez activer le " Profiler " dans Laravel 3 en définissant
Dans votre
application/config/application.php
etapplication/config/database.php
Cela active une barre au bas de chaque page. L'une de ses fonctionnalités est de répertorier les requêtes exécutées et la durée de chacune d'entre elles.
la source
Pour Eloquent, vous pouvez simplement faire:
Mais vous devez supprimer la partie "-> get ()" de votre requête.
la source
Je recommanderais d'utiliser l'extension Chrome Clockwork avec le package Laravel https://github.com/itsgoingd/clockwork . C'est facile à installer et à utiliser.
la source
Puisque le profileur n'est pas encore sorti dans Laravel 4 , j'ai créé cette fonction d'assistance pour voir le SQL généré:
REMARQUE : définissez l' indicateur $ all sur false si vous souhaitez uniquement la dernière requête SQL.
Je garde ce type de fonctions dans une classe appelée DBH.php (abréviation de Database Helper) afin que je puisse l'appeler de n'importe où comme ceci:
Voici le résultat que j'obtiens:
Au cas où vous vous poseriez la question, j'utilise Kint pour le formatage dd (). http://raveren.github.io/kint/
la source
if($all == false)
? Pourquoi pas simplementif(!$all)
Pour Laraver 4 c'est
la source
Voici un extrait de code Javascript rapide que vous pouvez ajouter à votre modèle de page maître. Tant qu'elle est incluse, toutes les requêtes seront envoyées à la console Javascript de votre navigateur. Il les imprime dans une liste facilement lisible, ce qui facilite la navigation sur votre site et la visualisation des requêtes en cours d'exécution sur chaque page.
Lorsque vous avez terminé le débogage, supprimez-le simplement de votre modèle.
la source
DB::getQueryLog()
renvoie un tableau, il n'est pas nécessaire de l'entourer de "".json_encode
le traduira en conséquence.Laravel 5
Notez qu'il s'agit de l' approche procédurale , que j'utilise pour un débogage rapide
dans votre en-tête, utilisez:
La sortie ressemblera à ceci (le fichier journal par défaut est laravel.log ):
*** Je connais cette question spécifiée Laravel 3/4 mais cette page apparaît lors de la recherche d'une réponse générale. Les débutants à Laravel peuvent ne pas savoir qu'il existe une différence entre les versions. Étant donné que je ne vois jamais
DD::enableQueryLog()
mentionné dans aucune des réponses que je trouve normalement, cela peut être spécifique à Laravel 5 - peut-être que quelqu'un peut commenter cela.la source
Vous pouvez également écouter les événements de requête en utilisant ceci:
Consultez les informations de la documentation ici sous Écoute des événements de requête
la source
L'utilisation du journal des requêtes ne vous donne pas la requête RAW réelle en cours d'exécution, en particulier s'il existe des valeurs liées. C'est la meilleure approche pour obtenir le SQL brut:
ou plus impliqué:
la source
Si vous utilisez Laravel 5, vous devez l'insérer avant la requête ou sur le middleware:
la source
Ou comme alternative au profileur laravel 3, vous pouvez utiliser:
https://github.com/paulboco/profiler ou https://github.com/barryvdh/laravel-debugbar
la source
dans Laravel 4, vous pouvez en fait utiliser un écouteur d'événements pour les requêtes de base de données.
Placez cet extrait n'importe où, par exemple dans
start/global.php
. Il écrira les requêtes dans le journal d'informations (storage/log/laravel.log
).la source
mettez-le dans global.php il enregistrera votre requête SQL.
la source
Le profileur Loic Sharma SQL prend en charge Laravel 4, je viens de l'installer. Les instructions sont répertoriées ici . Les étapes sont les suivantes:
"loic-sharma/profiler": "1.1.*"
la section require dans composer.jsonphp composer.phar self-update
dans la console.php composer.phar update loic-sharma/profiler
dans la console `'Profiler\ProfilerServiceProvider',
le tableau de fournisseurs dans app.php'Profiler' => 'Profiler\Facades\Profiler',
le tableau d'aliasses dans app.phpphp artisan config:publish loic-sharma/profiler
dans la consolela source
Impression de la dernière requête
la source
L4 monoplace
(qui écrit la requête):
$q=\DB::getQueryLog();dd(end($q));
la source
Laravel 3
Une autre façon de procéder est:
Pour le résultat de toutes les requêtes:
Pour le dernier résultat:
la source
Pour obtenir la dernière requête exécutée dans laravel, nous utiliserons la
DB::getQueryLog()
fonction de laravel pour renvoyer toutes les requêtes exécutées. Pour obtenir la dernière requête, nous utiliserons laend()
fonction qui renvoie la dernière requête exécutée.J'ai pris référence à http://www.tutsway.com/how-to-get-the-last-executed-query-in-laravel.php .
la source
Il existe un moyen très simple de le faire, à partir de votre requête laravel, renommez simplement n'importe quel nom de colonne, cela vous montrera une erreur avec votre requête .. :)
la source