首頁 >後端開發 >php教程 >Laravel框架實作利用監聽器進行sql語句記錄功能

Laravel框架實作利用監聽器進行sql語句記錄功能

不言
不言原創
2018-06-07 09:48:201884瀏覽

這篇文章主要介紹了Laravel框架實現利用監聽器進行sql語句記錄功能,結合實例形式分析了Laravel框架監聽器的創建、引入以及使用監聽器記錄sql語句的相關操作技巧,需要的朋友可以參考下方

本文實例講述了Laravel框架實作利用監聽器進行sql語句記錄功能。分享給大家供大家參考,具體如下:

利用監聽器進行sql語句記錄

#1、監聽sql語句的事件類別已經定義,直接建立監聽器類別即可:

# 监听sql
make:listener QueryListener --event=Illuminate\Database\Events\QueryExecuted

2、監聽器類別代碼

./app/Listeners/ QueryListener.php

<?php
namespace 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("?", "&#39;%s&#39;", $event->sql);
    $log = vsprintf($sql, $event->bindings);
    # 此处$uid定义是依赖于中间件记录操作日志代码
    $uid = isset($_SERVER[&#39;admin_uid&#39;]) ? $_SERVER[&#39;admin_uid&#39;] : 0;
    if(&#39;select&#39; != substr($log , 0 , 6)){
      if(&#39;insert into `operationLog`&#39; != substr($log , 0 , 26)){
        $OperationLog = new OperationLog();
        $OperationLog->uid = $uid;
        $OperationLog->sql = $log;
        $OperationLog->input = &#39;&#39;;
        $OperationLog->save();
      }
    }
  }
}

#3、引入監聽器

##./app/Providers /EventServiceProvider.php

protected $listen = [
    ...
    \Illuminate\Database\Events\QueryExecuted::class => [
      &#39;App\Listeners\QueryListener&#39;
    ],
    ...
  ];

#此時進行操作時就會記錄sql日誌

##相關推薦:

Laravel5中實作模糊匹配加多條件查詢功能的方法

以上是Laravel框架實作利用監聽器進行sql語句記錄功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn