Mon équipe et moi travaillons sur un assez gros projet. Il y a des requêtes partout - dans les contrôleurs, dans les compositeurs dans les vues (chargement paresseux) et probablement aussi dans certains autres services. Il devient difficile de garder une trace de tout cela et la vitesse de chargement des pages est assez lente pour le moment.
Où placerais-je\DB :: enableQueryLog () et\DB :: getQueryLog () pour consigner TOUTES les requêtes et les vider? Fondamentalement, je recherche un emplacement dans le code qui se produit avant l'une des requêtes (pour mettre enableQueryLog ()) et un emplacement qui se produit après le rendu des vues (pour vider getQueryLog ()).
Quel serait un bon moyen de s'y prendre?
Merci d'avance.
Voici l'exemple parfait:
https://laravel.com/docs/5.3/database#listening-for-query-events
Ouvrez app\Providers\AppServiceProvider.php et ajoutez les éléments suivants à la fonction Boot()
:
DB::listen(function ($query) {
var_dump([
$query->sql,
$query->bindings,
$query->time
]);
});
Vous pouvez ajouter ceci au fichier Providers/AppServiceProvider.php et les vérifier dans le fichier journal laravel avec tail:
tail -f storage/logs/laravel.log
Vous pouvez même filtrer avec les requêtes que vous souhaitez enregistrer. Par exemple, ici, j’utilisais Laravel Passport et je ne voulais pas enregistrer toutes les requêtes oauth.
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\Log;
public function register() {
if (App::environment('local') && env('APP_URL') == 'http://localhost') {
Event::listen('Illuminate\Database\Events\QueryExecuted', function ($query) {
// filter oauth ones
if (!str_contains($query->sql, 'oauth')) {
Log::debug($query->sql . ' - ' . serialize($query->bindings));
}
});
}
}
Placez ce code juste au-dessus du code où votre requête est exécutée
\DB::listen(function($sql) {
die(\Illuminate\Support\Str::replaceArray('?', $sql->bindings, $sql->sql));
});
Si vous souhaitez imprimer une requête qui est exécutée sur votre application, procédez comme suit.
Step1 : Accédez à votre fichier AppServiceProvider.php. // chemin du fichier App\Providers\AppServiceProvider.php
Étape 2 : Créez la méthode boot () et collez le code ci-dessous.
public function boot() {
// Log queries
if (true) {
\DB::listen(function ($query) {
\Log::info(
$query->sql, $query->bindings, $query->time
);
});
}
}
Étape 3 : Vous pouvez maintenant voir vos requêtes dans le fichier Lumen.log ou laravel.log Le chemin du fichier est laravel_app\storage\logs\laravel.log ou Lumen.log.
Prendre plaisir....
Additioanlly Il y a un paquet disponible aussi:
https://packagist.org/packages/technoknol/log-my-queries
Il suffit d'installer et d'ajouter son entrée au middleware. Il enregistrera toutes les requêtes dans le fichier journal laravel.log
par défaut.
ajoutez un middleware qui s'exécute une fois la requête terminée et enregistre vos requêtes ... voir Terminable Middlwares
Utilisez-vous MySQL? Vous pouvez simplement suivre le journal.
Comment afficher les dernières requêtes exécutées sur MySQL?
Ou utilisez la barre de débogage Laravel?