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