Ways to View SQL in Laravel
Published: 2023-09-16 09:45:44

After many years of experience in Laravel development, the author has compiled various methods to help you view SQL queries executed in Laravel. Hopefully, one of them will suit your needs.

## Method 1: Using Laravel's Built-In Logging System

Laravel provides a powerful logging system. You can use the `DB::listen` method to listen to database query events and log query information to log files. To use this method, you can add the following code to the `boot` method of `AppServiceProvider`:

```php
use Illuminate\Support\Facades\DB;

public function boot()
{
    DB::listen(function ($query) {
        \Log::info($query->sql, ['bindings' => $query->bindings, 'time' => $query->time]);
    });
}
```

This will log every executed SQL query, including the query statement, bound parameters, and execution time.

## Method 2: Using the Laravel Debugbar Extension

Laravel Debugbar is a popular debugging tool that provides an easy-to-use interface for viewing various debugging information, including SQL queries. You can install Debugbar using Composer:

```bash
composer require barryvdh/laravel-debugbar
```

Then, add `Barryvdh\Debugbar\ServiceProvider` to the `providers` array in your `config/app.php` file. Afterward, you can view SQL queries and execution times for each request in your browser.

## Method 3: Using Laravel Telescope

Laravel Telescope is an official debugging and monitoring tool provided by Laravel. It allows you to view various operations performed by your application, including SQL queries. You can install Telescope using Composer:

```bash
composer require laravel/telescope
```

Then, run Telescope's installation command and migrate:

```bash
php artisan telescope:install
php artisan migrate
```

After enabling Telescope, you can access its dashboard at the `/telescope` endpoint to view SQL queries and other useful debugging information.

## Method 4: Using the `DB::getQueryLog` Method

You can use the `DB::getQueryLog` method in your code to retrieve all SQL queries executed during the current request. For example:

```php
DB::enableQueryLog();
// Perform some query operations
$queries = DB::getQueryLog();
```

This will return an array containing all executed SQL queries.

## Method 5: Using the `toSql()` Method

The `toSql` method can convert a query builder instance into the corresponding SQL statement, but it does not execute the SQL statement. This method is mainly used for debugging purposes.

```php
$query = DB::table('users')->where('votes', '>', 100)->toSql();
```

The `$query` variable now contains the corresponding SQL statement, but the SQL statement itself is not executed.

## Method 6: Using External Tools

If you prefer not to modify your code, the following two methods can help you view SQL queries:

### 1. Enabling MySQL Query Logging

Simply add the following code to the `my.cnf` file of your MySQL server to enable logging of all executed SQL queries:

```
# Log SQL queries
general_log = 1
general_log_file = /var/log/mysql/general_sql.log
```

![MySQL Log](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4tsvpdnhsxkvqxho7h52.png)

To use this method, you need permission to access the MySQL server and log in to it. If multiple users share a MySQL development server, it's best not to enable this feature as it can cause confusion. Additionally, since the logs contain a lot of information, it can be difficult to identify which queries are yours. Therefore, it is recommended to use this feature on a testing server and only enable it when needed to address significant issues.

### 2. [Using the PHPStorm Plugin](https://plugins.jetbrains.com/plugin/22655-mysql-proxy/)

The PHPStorm plugin marketplace offers a plugin called [MySQL Proxy](https://plugins.jetbrains.com/plugin/22655-mysql-proxy/) that, when installed, can display all SQL logs by configuring your database connection to proxy through it. This is the author's preferred tool, as it doesn't require code changes, doesn't need MySQL database server permissions, and offers convenient retrieval.

![MySQL Proxy](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dwig7przghnl3s3ttyn1.png)

These are some methods for viewing SQL queries executed in Laravel. You can choose the one that suits your project and requirements for debugging and monitoring database queries.

We hope this article is helpful to you! If you have any questions or suggestions, please feel free to leave a comment.