我知道我可以在查询构建器上使用tosql方法来获取带有SELECT语句的绑定参数占位符的原始sql.
App\User::where(['id'=>'1'])->tosql();

06001

但是如何才能获得DELETE语句呢?

App\User::where(['id'=>'1'])->delete()->tosql();

PHP error: Call to a member function tosql() on integer on line 1

这会执行该语句,但我希望获得原始的,未插入的sql,其中的问号代表值而不实际运行查询.对于任何修改语句,例如INSERT或UPDATE,都适用相同的情况

但为什么,谁在乎呢?

这有点像xy problem.我的Web应用程序包含一个多进程架构.它运行自定义工匠命令,异步通信在事件驱动的循环中监听,以更新数据库.

我需要原始查询的原因是因为我想重用一个准备好的语句来提高性能.不幸的是,雄辩的方法没有暴露准备好的语句,所以为了重用一个,我必须自己从底层的PDO连接中准备它.

$sql = 'UPDATE `foo` SET `bar` = ? WHERE (`id` = ?)';

$statement = DB::connection()->getPdo()->prepare($sql);

while (true) {
    $data = foo();
    $statement->execute([$data->bar,$data->id]);
}

但是,这与抽象的sql语法构建器不同.因为我现在正在使用MysqL,所以我可以在语法上包含反引号.但现在我被供应商锁定了.比方说,老板说明天我们要转移到MS sql Server,然后很可能(至少)要抓住使用反引号而不是方括号的bug.

我想使用动态生成的sql语法在预准备语句中重用.

首先获取模型表的查询构建器实例.
$builder = DB::table((new User)->getTable());

然后获取语法并使用where子句从构建器编译delete语句.

$sql = $builder->getGrammar()->compileDelete($builder->where('id',1));

06002

现在,您可以自由地交换数据库驱动程序,并仍然获得适当的平台语法.

php – 如何获取Laravel删除/更新/插入语句的原始SQL?的更多相关文章

  1. 在Android上同步SQL数据库与REST远程服务器的最佳实践

    编辑:例如,采用方法2,重写的ContentProvider#bulkInsert使用数据库事务可以大大加快批量插入操作:见thisquestion.解决方法最佳选择需要适当的API实现–何时应存储一些db_version.并且在更新服务器期间响应数据和操作类型–添加,更新,删除.

  2. 可以从Android SQLiteConstraintException获取特定的错误详细信息?

    我对某些数据收到以下错误,概念很清楚:但是,这并没有帮助我找到哪个特定记录具有无效的FK.而不是颠覆我的代码并尝试用新事务隔离每个插入,是否有任何方法可以打开(或提取)日志记录,使用有用的详细信息,例如有问题的表,甚至导致问题的FK值?

  3. android – 没有SQL的ContentProvider

    我有两个数据需要从外部应用程序访问并存储.根据文档,ContentProviders是唯一可能的方式,但它也提到了外部存储.ContentProviders实现类似数据库的“接口”,对于两个数据,使用数据库是非常不必要的.我宁愿将它们保存到文件中,但是通过实现抽象方法使用ContentProvider是有问题的,因为这些方法被构造为数据库查询.我知道没有任何指定ContentProviders必须使用下面的数据库来存储数据,但有没有其他方法来存储必须共享到文件系统的最小数据量?

  4. Android SQL:检查数据库中的记录是否存在

    我正在尝试根据特定的ID查询我的数据库.如果这是第一次运行活动,则表将与id列一起存在,但不会有具有特定ID的记录.如何检查特定记录是否存在,如果不存在,请添加它?关于检查特定列是否存在,我发现了很多内容,但没有关于检查特定记录是否存在的信息.到目前为止,我已经尝试获取id列索引并检查它是否返回-1,但实际上由于某种原因返回1.我可以在if语句中使用什么来验证是否尚未创建id列?

  5. android – DBFlow选择列表中的COLUMN?

    我正在尝试在列表中查询具有主键的所有模型的数据库.这是我的查询:但AndroidStudio突出了其中的条件那么条件.在不被视为条件?我正在使用DBFlow2.0.我也可以使用常规SQL查询字符串作为替代,但我不熟悉sql,所以如果你可以为我的问题提供SQL查询字符串,那将是一种可能的解决方法.解决方法DBFlowv3.x现在允许您将集合传递给Condition.in()

  6. 隐藏Microsoft Sql Server 2008R2及更高版本上的登录数据库

    请任何人都可以协助隐藏sqlserver2008R2或更新版本上的可用数据库.我有一个新的登录用户,我映射到一个特定的数据库.使用特定登录用户登录时,我可以看到服务器上的所有数据库,但我无法访问它们,除了我映射到登录的那个.这是100%但我的问题是我不希望登录甚至看到那些其他数据库可用.如何防止未映射到登录的其他数据库显示?

  7. Microsoft SQL Server Management Studio – 将结果作为文本查询

    我在MicrosoftsqlServer中有一个数据库,我正在使用MicrosoftsqlServerManagementStudio.我可以选择将查询结果插入到文件中,但查询结果不会被任何特殊符号分隔.看起来像这样输出:在文件中:有没有可能修改查询所以在每条记录之后它会放一个特殊的字符,如下所示:在文件中:我将这个数据库复制到其他程序会更容易.在SSMS中:工具>选项>查询结果>结果到文本顶部选

  8. 使用Clojure连接到Microsoft SQL Server

    我正在使用Windows身份验证连接到MicrosoftsqlServer2008数据库.我已经下载了MSsqlServer的JDBC驱动程序,并将其添加到我的CLAsspATH.以下是我的clojure代码.无论我做什么我得到java.sql.sqlException:没有适合的驱动程序找到jdbc:sqlserver我已经验证我有访问数据库,我的类路径是正确的,我有正确的JDBC版本下载.有人

  9. windows-7-x64 – 用户sa在SQL Server 2008 R2上登录失败

    升级到ServicePack1后,有时我无法登录我的服务器此时,服务器配置管理器如下所示我需要改变什么吗?谢谢.–一旦我可以登录,服务器配置管理器如下所示在失败的时候,我尝试启动“sqlServer”但是无法启动.我的R2快递有什么问题?

  10. .net – 无法从Windows Service连接到SQL LocalDB,WPF应用程序和SSMS工作正常?

    因为当我将连接字符串复制到我的WPF应用程序,并使用它而不是Windows的auth,它工作!服务不断失败,并显示以下信息:这是我使用的连接字符串:似乎有一些障碍是使Windows服务的连接正确连接,而其他人没有这样的问题.LocalDB安装是新鲜的,而不是DB和Login/User创建的,对OOB状态没有任何作用.谁能帮忙?

随机推荐

  1. php – 用户身份验证不会在Laravel包中持久存在

    谢谢事实证明问题在于新的Web中间件,将我需要会话数据的所有路由移动到路由组中,一切正常.

  2. php – 找不到laravel类(适用于localhost但不适用于DO服务器)

    这是一个重复的问题–例如:Laravel4migrations–classnotfound但是,我已经尝试了所有解决方案并且无法解决这个问题.脚本我在我的本地机器上创建了一个Laravel4项目–添加了一些类,控制器,视图等–项目运行良好.然后我将这个新的repo复制到我的DO服务器上–用composer等安装依赖项.该项目看起来不错,除了一个页面发出错误:您可以查看此页面here.我试过了…

  3. php – Laravel SSH服务器未存储在配置文件中

    我有一个涉及服务器管理的项目,我需要执行一些SSH命令.在Laravel我有SSH实用程序(远程),但我必须将配置放在一个文件中.我需要从数据库中连接存储在模型中的凭据.任何想法我怎么能这样做?

  4. php – 如何通过Axios将文件发送到Laravel

    我需要通过Axios将文件从客户端发布到服务器.这是我的Vuejs代码:这是我用于处理已发送文件的Laravel代码:但它始终返回否它不是文件.任何帮助将非常感激.您必须创建一个FormData对象并附加图像文件.一个例子是here.如果有效,请告诉我.

  5. php – Laravel API TokenMismatchException

    我有一个带有帖子数据的API调用;让我们说这是登录过程.使用Chrome的Postman扩展程序,我通过POST发送用户名和密码以登录用户.但是我得到了这样的信息:在我的基本控制器中,我有:当我用beforeFilter删除行时,一切正常.但这不是一个解决方案.任何POST调用都会收到此错误消息.我知道我需要这个_token.但是当我从API调用时,我如何获得此令牌?我知道我可以在Laravel中创建一个令牌,但是当我通过API从外部打电话时我怎么能这样做呢?

  6. php – Laravel重定向到一个路由,但随后apache给出了404错误

    这是我的最终(和工作)vhost配置:

  7. php – Laravel Collection键修改

    我使用Collection类中的filter方法从集合中删除一些对象.但在那次操作之后,有时会出现带钥匙的物体,例剩下1,4,5.我希望在过滤操作后总是有0,1,2,3等顺序的元素.有没有任何优雅的方法来做到这一点,而无需将表重写为新表?您可以使用LaravelCollection的values()方法以序列化顺序生成集合的键,如下所示:希望这可以帮助!

  8. php – Laravel 5,如何测试是否在控制器中选中了Checkbox

    如果选中复选框,我试图获取:在我看来:在我的控制器中:在web.PHP中:但不起作用.我该怎么办?谢谢你的答复.编辑1:这是我的形式很差的建设我相信你真正的问题是你有两种不同的形式.您的复选框采用一种形式,您的提交按钮采用第二种形式.我相信它们都需要采用相同的形式.否则,永远不会返回您的复选框状态,无论其状态如何.在您的视图中,尝试替换您提供的表单标记:

  9. php – Laravel 5 – 根据需要验证数组,但允许传递一个空数组

    我正在使用验证器验证Laravel5.4中的请求,请参阅文档:https://laravel.com/docs/5.4/validation#validating-arrays基本上,这是Controller中的代码:我想要求字段“items”的存在,并且这个代码可以实现,但问题是当“items”字段是空数组时验证失败,即,这是一种不受欢迎的行为.我知道这是“必需”参数的记录行为,但我没有看到任何

  10. php – Laravel扩展Form类

    我正在尝试扩展L4.1中的Form类,但我似乎错过了一些东西.我的文件基于API命名为FormBuilder.PHP,保存在app/libraries/extended/FormBuilder.PHP中.这实际上是我第一次尝试在Laravel中扩展核心类.我似乎无法指出如何正确扩展像这个Form类的核心类.编辑:我将“app/libraries/extended”添加到我的composer.jso

返回
顶部