2017-03-13 65 views
1

我想顯示一個查詢,而不使用Eloquent執行它。我想寫這樣的:如何顯示查詢而不執行它與雄辯

\DB::table('my_table')-> updateOrInsert(['a' => 'b'], ['c' => 'd']); 

這是一個生產行動,所以我有點直接運行它的壓力。有沒有辦法顯示它而不是運行它?

回答

2

如果您有查詢構建器實例,則可以使用toSql()。由於updateOrInsert()方法不會返回構建器實例,因此無法以此方式阻止其執行。相反,您可以將查詢放入DB::pretend()閉包中,並且它應該返回它將執行的查詢。

\DB::pretend(function() { 
    \DB::table('my_table')->update(['a' => 'b']); 
}); 

應返回:

[ 
    [ 
     "query" => "update `my_table` set `a` = ?", 
     "bindings" => [ 
      "b", 
     ], 
     "time" => 0.01, 
    ], 
] 

注意:您所提供永遠不會因爲insertOrUpdate()工作的例子並不存在。我相信你正在尋找updateOrInsert()

+0

謝謝!編輯! –

0

你可以看到原始查詢具有:

$foo = DB::getQueryLog(); 
var_dump($foo); 

它將執行查詢。

+0

好的,謝謝。但是不執行它呢? –

+0

我不相信這是可能的。這裏有一個很好的教程:https://scotch.io/tutorials/debugging-queries-in-laravel – Gab

+0

@Gab這是可能的。看到我的答案。 – jfadich