Laravel - 获取原始查询而不执行此查询

时间:2014-02-22 15:19:47

标签: php laravel eloquent

我认为这是一个简单的问题,但我无法解决。

如何在不执行此查询的情况下获取Eloquent查询的原始查询。

示例:

$rawQuery = getRawQuery(Product::where('is_sold', '=', 1)->get()); // or something like that

echo $rawQuery; // select * from `product` where `product`.`is_sold` = 1

2 个答案:

答案 0 :(得分:1)

我认为你需要这个:

$rawQuery = Product::where('is_sold', '=', 1)->toSql();

要获得绑定,您可以这样做:

var_dump(Product::where('is_sold', '=', 1)->getBindings());

答案 1 :(得分:0)

如果您想在运行之后获取最后一个查询,那么您可以使用:

Product::where('is_sold', '=', 1)->get();

// Get the last query
$q = DB::getQueryLog();
print_r(end($q)); // or dd(end($q));

你会得到这样的东西:

Array ( 
    [query] => select * from `products` where `is_sold` = ? 
    [bindings] => Array ( [0] => 1 ) [time] => 0.38 )

此外,如果您要记录所有查询,则可以使用illuminate.query事件:

Event::listen('illuminate.query', function($query, $bindings, $time, $name)
{
    // use Log class to log queries
});

或者,您可以使用clockwork(Chrome扩展程序)在Chrome控制台中查看所有查询详细信息,这非常有用,您可以为Laravel配置它,详细信息在文档中但有还可以使用其他PHP/Laravel个包。