从Laravel查询生成器生成原始MySQL查询

Sae*_*iry 16 php mysql laravel

如何mysql查询laravel查询

兑换:

App\User::where('balance','>',0)->where(...)->get();
Run Code Online (Sandbox Code Playgroud)

至:

SELECT * FROM users WHERE `balance`>0 and ...
Run Code Online (Sandbox Code Playgroud)

RAU*_*MAR 34

使用toSql()laravel方法来获取要执行的查询

App\User::where('balance','>',0)->where(...)->toSql();
Run Code Online (Sandbox Code Playgroud)

但是Laravel不会在查询中显示参数,因为它们在准备查询后被绑定.要获取绑定参数,请使用此参数

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

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

dd(DB::getQueryLog());
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法获取带参数的查询? (3认同)
  • 如果没有,我如何向这个原始查询添加参数? (2认同)

hon*_*hah 7

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

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;
}
Run Code Online (Sandbox Code Playgroud)

并像这样使用:

getRealQuery(App\User::where('balance','>',0)->where(...),true)
Run Code Online (Sandbox Code Playgroud)