Domanda Laravel 5.3 - Come registrare tutte le query su una pagina?


Io e il mio team stiamo lavorando a un progetto piuttosto grande. Le query si verificano ovunque - nei controller, in vista dei compositori nelle visualizzazioni (caricamento lento) e probabilmente anche in altri servizi. Sta diventando difficile tenere traccia di tutto e la velocità di caricamento della pagina è piuttosto lenta al momento.

Dove inserire \ DB :: enableQueryLog () e \ DB :: getQueryLog () per registrare TUTTE le query e scaricarle? Fondamentalmente sto cercando un posto nel codice che accade prima che una qualsiasi delle query avvenga (per mettere enableQueryLog ()) e sto cercando un posto che accade dopo il rendering delle viste (per scaricare getQueryLog ()).

Quale sarebbe un buon modo per fare questo?

Grazie in anticipo.


12
2017-12-15 11:35


origine


risposte:


Ecco l'esempio perfetto:

https://laravel.com/docs/5.3/database#listening-for-query-events

Aperto App \ Providers \ AppServiceProvider.php e aggiungi il seguente a Boot() funzione:

DB::listen(function ($query) {
    var_dump([
        $query->sql,
        $query->bindings,
        $query->time
    ]);
});

18
2017-12-15 11:47



È possibile aggiungere questo al file Provider / AppServiceProvider.php e controllarli nel file di registro laravel con coda:

tail -f storage/logs/laravel.log

Puoi persino filtrare con le query che desideri registrare. Ad esempio, qui stavo usando Laravel Passport e non volevo registrare tutte le query 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));
            }
        });
    }
}

8
2018-03-31 09:48



aggiungi un middleware che viene eseguito dopo che la richiesta è stata eseguita e registra le tue query ... vedi Middlwares terminabili


0
2017-12-15 11:41



Stai usando MySQL? Puoi solo coda il registro.

Come mostrare le ultime query eseguite su MySQL?

O usare la barra di debug di Laravel?


0
2017-12-15 14:19