Postgresql 如何显示查询而不使用雄辩的语言执行查询

Postgresql 如何显示查询而不使用雄辩的语言执行查询,postgresql,laravel,laravel-5,eloquent,laravel-5.4,Postgresql,Laravel,Laravel 5,Eloquent,Laravel 5.4,我想显示一个查询,而不使用Elount执行它。我想写一些像: \DB::table('my_table')-> updateOrInsert(['a' => 'b'], ['c' => 'd']); 这是一个生产活动,所以我有点担心直接运行它。有没有办法显示它而不是运行它?您可以通过以下方式查看原始查询: $foo = DB::getQueryLog(); var_dump($foo); 它将执行查询。如果您有查询生成器实例,则可以使用toSql()。由于updateOrI

我想显示一个查询,而不使用Elount执行它。我想写一些像:

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

这是一个生产活动,所以我有点担心直接运行它。有没有办法显示它而不是运行它?

您可以通过以下方式查看原始查询:

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

它将执行查询。

如果您有查询生成器实例,则可以使用
toSql()
。由于
updateOrInsert()
方法不返回构建器实例,因此不能以这种方式阻止其执行。相反,您可以将查询放在
DB::假装()
闭包中,它应该返回它将执行的查询

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

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

注意:您提供的示例永远不会起作用,因为
insertOrUpdate()
不存在。我相信您正在寻找
updateOrInsert()

我认为这是不可能的。这里有一个很好的教程:@Gab这是可能的。看看我的答案。