如何显示查询而不用eloquent执行它

时间:2017-03-13 16:20:58

标签: postgresql laravel laravel-5 eloquent laravel-5.4

我想在不使用Eloquent执行查询的情况下显示查询。我想写一些类似的东西:

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

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

2 个答案:

答案 0 :(得分:2)

如果您有查询构建器实例,则可以使用using IdentityServer3.Core.Models; using System.Collections.Generic; namespace IdentityServer3 { public static class Clients { public static IEnumerable<Client> Get() { return new[] { new Client { Enabled = true, ClientName = "MVC Client", ClientId = "mvc", Flow = Flows.Implicit, RedirectUris = new List<string> { "https://localhost:44319/" }, AllowAccessToAllScopes = true } }; } } } 。由于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()

答案 1 :(得分:0)

您可以看到原始查询:

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

它将执行查询。