现在的需求是 记录用户的操作记录(包含操作sql)
目前的想法如下:
先自定义一个事件监听
然后自定义一个方法L(),在方法中触发事件
然后开发人员在自己希望记录日志的地方打上一个L(['想记录的数据', $是否记录此L方法之前所执行的所有sql])
然后L()方法把这些写参数传递给事件的listener,listener主要就是把用户想记录的这些数据放到数据库中,作为一次操作记录
现在的问题是我如何随意地就能在打了L()方法的位置获取之前的sql运行记录?
网上有人说在route中监听illuminate.query,这样一是直接记录了整个请求中所有的sql,不太符合要求,二是写在route中或者route之前感觉太low了
还有人说先DB::enableQueryLog() ,然后是sql语句, 然后可以获取sql, 问题是这样的话, 我就需要在每个控制器中首先开启DB::enableQueryLog(), 我希望的是用户直接在L方法中传入参数用来决定记录不记录sql
求大神指教
你需要把下面的放到
AppServiceProvider
的boot
中在此处弄个全局变量记录所有的执行的语句
L()
去读取这个值即可,当然你用一个单实例的类去记录更好咯,这样代码比较面向对象。