Laravel获取完整带参数的sql语句
前言在laravel中,如果我们想要获取ORM或者DB模型最终形成的sql,往往会使用到toSql()这个方法 。然而问题在于,传递进模型的参数在toSql结果中是用 “?” 代替的,这就导致我们不能直观的进行调试,甚至当我们使用其作为子查询语句时,会出现参数不能补全的问题。然而对于此问题,官方并没有提供合适的方法,所以,我们只能通过自己来曲线救国一波~ 经过搜索实践,分享方案如下 实现打开AppServiceProvider(方便起见直接使用app,亦可自定义Provider)在boot方法中添加如下代码: 123456789\Illuminate\Database\Query\Builder::macro('sql', function () { $bindings = $this->getBindings(); $sql = str_replace('?','%s',$this->toSql()); return vsprintf($sql, $bindings);}); ...
Mysql的事务隔离级别说明
前言mysql中一共有4种隔离级别(因为只有InnoDB引擎支持事务,所以也可以说是InnoDB的事务隔离级别) 隔离级别的实现是基于MVCC方案以及锁机制,此文仅作为隔离级别的参考,所以就不过多介绍了 级别 读未提交 READ UNCOMMITTED该模式允许读取其它事务并未提交的数据,会引起脏读(读到了其它事务未提交的数据),如果没有必要的需求,不应该使用 读已提交(不可重复读) READ COMMITTED该模式只会读取其它事务提交后的结果,但是如果当前事务中存在多次同样的查询,有可能会出现结果不一致(因为中间其它事务修改了数据) 可重复读 REPEATABLE READ相比较不可重复读,此模式保证了数据在当前事务中的不变性,即使其他事务修改了数据。但是与不可重复读一样,它们都可能会产生幻读(其它事务为表格增加了新的数据条目,导致出现当前事务中多个同样的涉及到条数的查询结果条数不一致)该模式是mysql的默认隔离级别 序列化 SERIALIZABLE此模式将事务串行化执行,不会出现任何并发问题 修改隔离级别命令:set session transaction i ...
环境搭建-Centos7手动编译安装Nginx
相关链接官网:http://nginx.org/ 下载页:http://nginx.org/en/download.html 本文所用1.16版本链接:http://45.252.224.80/files/B21100000DD4301F/nginx.org/download/nginx-1.16.0.tar.gz configure配置项列表:http://nginx.org/en/docs/configure.html 步骤安装依赖yum install gcc gcc-c++ autoconf make automake pcre pcre-devel zlib openssl openssl-devel(其中openssl可根据需要决定是否安装,用来支持开启ssl,也就是https服务) 开放端口(http 80,https 443)firewall-cmd –zone=public –add-port=80/tcp –permanentfirewall-cmd –zone=public –add-port=443/t ...
RabbitMQ轻松实现延时队列
原理首先,我们需要知道,Rabbit本身是不支持延时队列的。但是,它有一个死信投递机制,可以曲线救国来实现我们想要的延时效果 所谓死信,是指某个队列中的消息未被正常消费,既被标记为死信。未正常消费情况可能如下: 消费者使用basic.reject或 basic.nack将requeue参数设置为false来否定该消息(https://www.rabbitmq.com/confirms.html) 该消息超时未被消费(https://www.rabbitmq.com/ttl.html) 消息被删除,因为其队列超过了长度限制 (https://www.rabbitmq.com/maxlength.html)(以上摘自官方文档) 重点是,Rabbit可以为队列指定 死信交换机 和 死信RouteKey 参数,那么当该队列产生死信后,Rabbit便会自动将死信投递到所指定的交换机,通过RouteKey再到其它队列 利用该机制,设想: 建立A-E交换机和A-Q队列,并相互绑定 建立B-E交换机和B-Q队列,并相互绑定,RouteKey为B-Key 设置A-Q的消息超时时间为X毫秒(想要延时 ...
最接地气的Ngrok服务器搭建教程
前言简单说一下什么是ngrok: ngrok是一个内网穿透的解决方案,它使得你本地的服务器可以被局域网外的公网访问到ngork有服务端和客户端,服务端运行在公网服务器,客户端运行在本地服务器ngrok服务端会建立http和https服务,默认端口80/443,以及供ngrok客户端连接的服务,默认端口4443 它的工作流程如下: 访问端输入域名->DNS->ngrok服务端->请求映射到ngrok客户端->客户端返回响应到ngrok服务端->ngrok服务端返回响应到访问端 本文环境centos7 64位 (其它环境请根据流程自行尝试) 准备工作 一台公网服务器 一个域名,顶级或二级均可 *关于域名:我们声明两个概念:一个是基础域名,可以是顶级或者二级,它用来为ngrok服务端本身提供外部访问(ngrok客户端连接用)。二就是基于基础域名的二级或者三级域名,它用来映射到你的本地服务器,我称它为映射域名。它可以设置多个,这取决于你的需要。例如 abc.com 和 ngrok.abc.com / ngrok2.abc.com,每个映射域名 ...