2017-03-13 20 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