本文實例講述了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("?", "'%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日志
相關文章:
Laravel框架實現利用中間件進行操作日志記錄功能
更多關于Laravel相關內容感興趣的讀者可查看本站專題:《Laravel框架入門與進階教程》、《php優秀開發框架總結》、《php面向對象程序設計入門教程》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》
希望本文所述對大家基于Laravel框架的PHP程序設計有所幫助。
您可能感興趣的文章:- Laravel SQL語句記錄方式(推薦)
- Laravel5.* 打印出執行的sql語句的方法
- Laravel框架執行原生SQL語句及使用paginate分頁的方法
- laravel實現查詢最后執行的一條sql語句的方法
- Laravel使用原生sql語句并調用的方法
- laravel 獲取某個查詢的查詢SQL語句方法
- Laravel 使用查詢構造器配合原生sql語句查詢的例子
- Laravel中如何輕松容易的輸出完整的SQL語句