如何在执行查询之前从Laravel的查询生成器获取原始查询字符串?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在执行查询之前从Laravel的查询生成器获取原始查询字符串?相关的知识,希望对你有一定的参考价值。

我有一个由一些条件创建的复杂查询,我想从构建器对象中获取最终的SQL查询即将执行。我能这样做吗?

答案

你可以做到:

$query = DB::table('brands')
                ->join('products','a','=','c')
                ->whereNull('whatever');

echo $query->toSql();

但是Laravel不会在查询中显示参数,因为它们在准备查询后被绑定。

所以你也可以这样做:

print_r( $query->getBindings() );
另一答案

对于调试,这可能非常方便,因为它返回带有绑定的SQL,因此您可以立即将其放入数据库控制台。

/**
 * Combines SQL and its bindings
 *
 * @param Eloquent $query
 * @return string
 */
public static function getEloquentSqlWithBindings($query)
{
    return vsprintf(str_replace('?', '%s', $query->toSql()), collect($query->getBindings())->map(function ($binding) {
        return is_numeric($binding) ? $binding : "'{$binding}'";
    })->toArray());
}

https://gist.github.com/thonyx/c061d56dc620284ab22526294b43518a找到了这个片段,所以所有学分都来自https://gist.github.com/thonyx :)

以上是关于如何在执行查询之前从Laravel的查询生成器获取原始查询字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 laravel 查询生成器从表联合的结果中选择列?

如何在 laravel 中使用查询生成器根据 id 从多个表中获取数据

Laravel 从查询生成器获取特定列

如何在查询生成器 laravel 中执行此 SQL

如何在 laravel 查询生成器上获取主键名称

如何在我的 Laravel 控制器中执行查询生成器?