Laravel – Prosty Query Debug

Łukasz Piotrowski Komentarzy 0

    Czasami musimy zobaczyć jak wygląda nasze wygenerowane zapytanie przez Eloquent czy DB.
    Możemy w prawdzie zainstalować dodatek laravel-debugbar jednak nie zawsze może być on pomocny.

    Przedstawię Wam prosty i skuteczny sposób na podglądanie zapytań :)


    Przygotowanie

    Aby móc podglądać zapytania musimy włączyć logowanie.

    \DB::enableQueryLog();

    Możemy to wrzucić albo do jakiegoś ServiceProvider np: AppServiceProvider lub bezpośrednio przed zapytanie które chcemy badać.

    Czary

    Najpierw kawałek kodu a potem wyjaśnienie:

    $queries = \DB::getQueryLog();
    foreach($queries as $key => $query) {
        $queries[$key]['raw'] = $query['query'];
        for($i=0, $counter = count($query['bindings']); $i < $counter; $i++) {
            $queries[$key]['raw'] = preg_replace('/\?/', "'".array_shift($query['bindings'])."'", $queries[$key]['raw'], 1);
        }
    }
    dd($queries);

    Ten kawałek kodu pobierze nam wszystkie zalogowane zapytania wykonane w bieżącej sesji, podstawi nam parametry oraz wypluje na ekran.

    Przykładowy wynik wygląda tak:

    array:1 [
      0 => array:4 [
        "query" => "select * from `program_service_charges` where ((program_id = ? AND user_id = ? AND role_id IS NULL) OR (program_id = ? AND role_id = ? AND user_id  IS NULL) OR (program_id = ? AND user_id  IS NULL AND role_id  IS NULL)) and `service` = ? order by `user_id` desc, `role_id` desc limit 1"
        "bindings" => array:6 [
          0 => 1
          1 => 1
          2 => 1
          3 => 1
          4 => 1
          5 => "cb_mo_25"
        ]
        "time" => 1.35
        "raw" => "select * from `program_service_charges` where ((program_id = '1' AND user_id = '1' AND role_id IS NULL) OR (program_id = '1' AND role_id = '1' AND user_id  IS NULL) OR (program_id = '1' AND user_id  IS NULL AND role_id  IS NULL)) and `service` = 'cb_mo_25' order by `user_id` desc, `role_id` desc limit 1"
      ]
    ]

    Inne artykuły

    Top