从Laravel Query Builder生成原始MySQL查询

2022-08-30 17:28:19

如何获取查询的查询mysqllaravel

转换:

App\User::where('balance','>',0)->where(...)->get();

自:

SELECT * FROM users WHERE `balance`>0 and ...

答案 1

使用 laravel 的方法获取要执行的查询,如下所示toSql()

App\User::where('balance','>',0)->where(...)->toSql();

但是 Laravel 不会在查询中显示参数,因为它们是在准备查询后绑定的。要获取绑定参数,请使用以下命令

$query=App\User::where('balance','>',0)->where(...);
print_r($query->getBindings() );

启用查询日志 as,然后将最后运行的查询输出到屏幕上,您可以使用此功能,DB::enableQueryLog()

dd(DB::getQueryLog());

答案 2

您可以将此功能添加到您的助手中

function getRealQuery($query, $dumpIt = false)
{
    $params = array_map(function ($item) {
        return "'{$item}'";
    }, $query->getBindings());
    $result = str_replace_array('\?', $params, $query->toSql());
    if ($dumpIt) {
        dd($result);
    }
    return $result;
}

并像这样使用:

getRealQuery(App\User::where('balance','>',0)->where(...),true)

推荐