2014-02-22 35 views
1

我認爲這是一個簡單的問題,但我無法解決。Laravel - 獲取未經執行的原始查詢這一個

如何獲得一個Eloquent查詢的原始查詢而不執行這一個。

例子:

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

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

它已經打印出原始查詢,因爲它應該是。這不是你想要的嗎?請澄清。 –

回答

1

我認爲你需要這樣的:

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

爲了讓您的綁定,你可以這樣做:

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

謝謝。這是我需要的。 –

+0

哦,不!我得到的結果是:select * from'product',其中'product'.'is_sold' =? 如何獲取傳遞給此查詢的值? (也許這是array(1)。) –

+0

是的,綁定從查詢中分離出來,只是經過編輯,告訴你如何。 –

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可供使用的程序包。