在使用'with'子句的查询上使用Laravel的toSql

dsp*_*zle 7 laravel eloquent

我在Laravel工作,我有兴趣检查包含with()语句的Eloquent查询生成的SQL语句.出于某种原因,我只得到主查询.例如,当我跑

class Child extends EloquentVersioned {
    public function childRequests()
    {
        return $this->hasMany('ChildRequest');
    }   

}
$childQuery = Child::orderBy('last_name')->orderBy('first_name')->with( 'childRequests');
return $childQuery->toSql();
Run Code Online (Sandbox Code Playgroud)

我回来了:

select `children`.* from `children` order by `last_name` asc, `first_name` asc
Run Code Online (Sandbox Code Playgroud)

如何获取with('childRequests')查询的SQL?

The*_*pha 9

实际上,当使用with然后Laravel使用另一个查询,所以你没有得到该查询输出,但如果你使用,DB::getQueryLog()那么你将获得所有的查询日志,并获得你的日志,你可以运行实际的查询,例如:

Child::orderBy('last_name')->orderBy('first_name')->with( 'childRequests')->get();
Run Code Online (Sandbox Code Playgroud)

现在试试这个:

dd(DB::getQueryLog()); // an array of all queries
Run Code Online (Sandbox Code Playgroud)

您将获得查询的输出,您可以使用以下命令找到最后一个查询:

$queries = DB::getQueryLog();
dd(end($queries)); // only last query
Run Code Online (Sandbox Code Playgroud)

  • 很好,有时查询日志被禁用,您需要启用“DB::enableQueryLog();” (3认同)