如何在 Laravel 构建器上执行“解释选择”

Ske*_*ets 9 php mysql explain laravel

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

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

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

dd($query->explain());
Run Code Online (Sandbox Code Playgroud)

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

我尝试添加explain这样的内容:

$query->selectRaw("explain select user.*");
Run Code Online (Sandbox Code Playgroud)

但这导致了一个以以下内容开头的查询:

select explain select...
Run Code Online (Sandbox Code Playgroud)

...这只是无效的sql。

Adr*_*erg 16

Laravel 8.12开始,您可以简单地调用->explain()查询构建器,就像您在问题中所描述的那样。或者使用->explain()->dd()die 并转储解释。

例子:

User::where("favorite_color", "blue")->explain()->dd();
Run Code Online (Sandbox Code Playgroud)