我想在不使用Eloquent执行查询的情况下显示查询。我想写一些类似的东西:
\DB::table('my_table')-> updateOrInsert(['a' => 'b'], ['c' => 'd']);
这是一个制作动作,所以我有点担心直接运行它。有没有办法显示它而不是运行它?
答案 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);
它将执行查询。