Как получить построитель запросов для вывода его необработанного SQL-запроса в виде строки?

Если ваш массив всегда индексируется последовательно (например, «page1» всегда находится в индексе «0»), это довольно просто:

$List = array('page1', 'page2', 'page3', 'page4', 'page5');
$CurrentPage = 3; // 'page4'

while (key($List) !== $CurrentPage) next($List); // Advance until there's a match

Я лично не полагаюсь на автоматическую индексацию, потому что есть всегда есть шанс, что автоматический индекс может измениться. Вы должны явно указать ключи:

$List = array(
    '1' => 'page1',
    '2' => 'page2',
    '3' => 'page3',
);

EDIT: Если вы хотите проверить значения массива (вместо ключей), используйте current() :

while (current($List) !== $CurrentPage) next($List);

417
задан Karl Hill 17 November 2018 в 06:38
поделиться

4 ответа

Попробуйте это:

$results = DB::table('users')->toSql();
dd($results);

Примечание: доберитесь (), был заменен toSql () для отображения необработанного SQL-запроса.

2
ответ дан 22 November 2019 в 22:53
поделиться

Мой способ сделать это, на основе представления журнала, только должен изменить файл app/Providers/AppServiceProvider.php:

  1. Добавляют этот код в app/Providers/AppServiceProvider.php
/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    //
    DB::listen(function ($query) {
        $querySql = str_replace(['?'], ['\'%s\''], $query->sql);
        $queryRawSql = vsprintf($querySql, $query->bindings);
        Log::debug('[SQL EXEC]', [
                "raw sql"  => $queryRawSql,
                "time" => $query->time,
            ]
        );
    });
}
  1. Мой код дескриптора sql:
$users = DB::table('users')
    ->select(DB::raw('count(*) as user_count, username '))
    ->where('uid', '>=', 10)
    ->limit(100)
    ->groupBy('username')
    ->get()
;
dd($users);
  1. Посмотрите журнал storage/logs/laravel-2019-10-27.log:
[2019-10-27 17:39:17] local.DEBUG: [SQL EXEC] {"raw sql":"select count(*) as user_count, username  from `users` where `uid` >= '10' group by `username` limit 100","time":304.21} 
0
ответ дан 22 November 2019 в 22:53
поделиться

С Laravel 5.8.15 конструктор запросов теперь имеет dd и dump методы, таким образом, можно сделать

DB::table('data')->where('a', 1)->dump();
2
ответ дан 22 November 2019 в 22:53
поделиться

Я сделал это журналами запросов слушания и добавлением к массиву журнала:

//create query
$query=DB::table(...)...->where(...)...->orderBy(...)...
$log=[];//array of log lines
...
//invoked on query execution if query log is enabled
DB::listen(function ($query)use(&$log){
    $log[]=$query;//enqueue query data to logs
});
//enable query log
DB::enableQueryLog();
$res=$query->get();//execute
0
ответ дан 22 November 2019 в 22:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: