這篇文章主要介紹了Laravel架構實現利用監聽器進行sql語句記錄功能,結合執行個體形式分析了Laravel架構監聽器的建立、引入以及使用監聽器記錄sql語句的相關操作技巧,需要的朋友可以參考下
本文執行個體講述了Laravel架構實現利用監聽器進行sql語句記錄功能。分享給大家供大家參考,具體如下:
利用監聽器進行sql語句記錄
1、監聽sql語句的事件類別已經定義,直接建立監聽器類即可:
# 監聽sqlmake:listener QueryListener --event=Illuminate\Database\Events\QueryExecuted
2、監聽器類代碼
./app/Listeners/QueryListener.php
<?phpnamespace App\Listeners;use Illuminate\Database\Events\QueryExecuted;use Illuminate\Queue\InteractsWithQueue;use Illuminate\Contracts\Queue\ShouldQueue;use App\Http\Models\OperationLog;class QueryListener{ /** * Create the event listener. * * @return void */ public function __construct() { // } /** * Handle the event. * * @param QueryExecuted $event * @return void */ public function handle(QueryExecuted $event) { $sql = str_replace("?", "'%s'", $event->sql); $log = vsprintf($sql, $event->bindings); # 此處$uid定義是依賴於中介軟體記錄動作記錄代碼 $uid = isset($_SERVER['admin_uid']) ? $_SERVER['admin_uid'] : 0; if('select' != substr($log , 0 , 6)){ if('insert into `operationLog`' != substr($log , 0 , 26)){ $OperationLog = new OperationLog(); $OperationLog->uid = $uid; $OperationLog->sql = $log; $OperationLog->input = ''; $OperationLog->save(); } } }}
3、引入監聽器
./app/Providers/EventServiceProvider.php
protected $listen = [ ... \Illuminate\Database\Events\QueryExecuted::class => [ 'App\Listeners\QueryListener' ], ... ];
此時進行操作時就會記錄sql日誌