Laravel 4 SQL-журнал/консоль

Есть ли что-то подобное в Laravel, которое позволяет вам видеть, как выполняется фактический SQL? В Rails, например, вы можете увидеть SQL в консоли. В Django у вас есть панель инструментов.

Есть ли что-то подобное в Laravel 4?

Чтобы уточнить: Мой вопрос заключается в том, как это сделать без кода. Есть ли что-то, что встроено в Laravel, которое не требует от меня писать код в приложении?

ОБНОВЛЕНИЕ. Желательно также видеть запросы CLI (например, php artisan migrate)

Ответ 1

Если вы используете Laravel 4, используйте это:

$queries    = DB::getQueryLog();
$last_query = end($queries);

Ответ 2

Я делаю это в Laravel 4.

Просто установите его один раз в app/start/global.php или в любом месте, но убедитесь, что он загружен, и затем он начнет регистрировать все ваши SQL-запросы.

Event::listen("illuminate.query", function($query, $bindings, $time, $name){
    \Log::sql($query."\n");
    \Log::sql(json_encode($bindings)."\n");
});

Ответ 3

Вот быстрый фрагмент Javascript, который вы можете наложить на свой шаблон главной страницы. Пока он включен, все запросы будут выводиться на ваш браузер Javascript Console. Он печатает их в легко читаемом списке, что упрощает просмотр вашего сайта и просмотр того, какие запросы выполняются на каждой странице.

Когда вы закончите отладку, просто удалите ее из своего шаблона.

<script type="text/javascript">
    var queries = {{ json_encode(DB::getQueryLog()) }};
    console.log('/****************************** Database Queries ******************************/');
    console.log(' ');
    $.each(queries, function(id, query) {
        console.log('   ' + query.time + ' | ' + query.query + ' | ' + query.bindings[0]);
    });
    console.log(' ');
    console.log('/****************************** End Queries ***********************************/');
</script>

Ответ 4

Для этого есть пакет Composer: https://packagist.org/packages/loic-sharma/profiler

Он даст вам панель инструментов внизу с SQL-запросами, сообщениями журналов и т.д. Убедитесь, что вы установили debug в true в своей конфигурации.

Ответ 6

Я придумал очень простой способ (если вы используете php artisan serve и PHP 5.4) - добавьте это в app/start/local.php:

DB::listen(function($sql, $bindings, $time)
{
    file_put_contents('php://stderr', "[SQL] {$sql} in {$time} s\n" . 
                      "      bindinds: ".json_encode($bindings)."\n");
});

но надеясь найти более официальное решение.

Это приведет к выводу SQL-запросов следующим образом:

[SQL] select 1 in 0.06s

Ответ 7

Этот код непосредственно взят из другого источника, но я хотел упростить его, так как после него он работал на PHPStorm, используя мое окно терминала. Я смог просмотреть полный журнал, но после login была Sentry.

1.add

'log'=>true

внутри вашего config/database.php и ниже места имени базы данных ur ex.mysql

то добавьте ниже код в routes.php, прежде всего, без какой-либо конфигурации маршрута, так как u может сделать это в соответствии с конфигурацией маршрута выдачи, но, только посмотрите, когда вызывается этот маршрут.

чтобы увидеть этот вывод /goto / app/storage/log/somelogfile.log

if (Config::get('database.log', false))
{
    Event::listen('illuminate.query', function($query, $bindings, $time, $name)
    {
        $data = compact('bindings', 'time', 'name');

        // Format binding data for sql insertion
        foreach ($bindings as $i => $binding)
        {
            if ($binding instanceof \DateTime)
            {
                $bindings[$i] = $binding->format('\'Y-m-d H:i:s\'');
            }
            else if (is_string($binding))
            {
                $bindings[$i] = "'$binding'";
            }
        }

        // Insert bindings into query
        $query = str_replace(array('%', '?'), array('%%', '%s'), $query);
        $query = vsprintf($query, $bindings);

        Log::info($query, $data);
    });
}

Не забудьте сделать точку останова.... или ping me:)

Ответ 8

В экземпляре QueryBuilder существует метод toSql().

echo DB::table('employees')->toSql()

вернется:

select * from `employees`

Это самый простой способ отображения запросов.