如何在 laravel 构建器上执行 `explain select`

How to execute an `explain select` on a laravel builder

我知道我可以从查询日志中获取原始查询,粘贴所有绑定变量(也在查询日志中找到),在查询前面打一个 explain,然后 运行 它直接在 mysql 控制台中获取查询的解释....但是有没有更快的方法来获取解释?

理想情况下,我想做这样的事情:

$query = User::where("favorite_color", "blue");

dd($query->explain());

(显然,实际的查询会复杂得多并且有一些连接)

我试过这样添加 explain

$query->selectRaw("explain select user.*");

但这导致查询以以下内容开头:

select explain select...

... 无效 sql。

首先,将代码更改为原始代码 sql,

其次然后在原始sql、

之前添加解释

并使用DB::select()

$query = User::where("favorite_color", "blue");
$bindings = collect($query->getBindings())->map(function($q) {
    return is_string($q)? "\"$q\"": $q;
})->all();
$sql_with_bindings = str_replace_array('?', $bindings, $query->toSql());
DB::select("explain ".$sql_with_bindings);

Laravel 8.12 开始,您只需在查询构建器上调用 ->explain(),就像您在问题中描述的那样。