本文實(shí)例講述了Laravel框架實(shí)現(xiàn)利用監(jiān)聽器進(jìn)行sql語(yǔ)句記錄功能。分享給大家供大家參考,具體如下:
利用監(jiān)聽器進(jìn)行sql語(yǔ)句記錄
1、監(jiān)聽sql語(yǔ)句的事件類已經(jīng)定義,直接創(chuàng)建監(jiān)聽器類即可:
# 監(jiān)聽sql
make:listener QueryListener --event=Illuminate\Database\Events\QueryExecuted
2、監(jiān)聽器類代碼
./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、引入監(jiān)聽器
./app/Providers/EventServiceProvider.php
protected $listen = [
...
\Illuminate\Database\Events\QueryExecuted::class => [
'App\Listeners\QueryListener'
],
...
];
此時(shí)進(jìn)行操作時(shí)就會(huì)記錄sql日志
相關(guān)文章:
Laravel框架實(shí)現(xiàn)利用中間件進(jìn)行操作日志記錄功能
更多關(guān)于Laravel相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Laravel框架入門與進(jìn)階教程》、《php優(yōu)秀開發(fā)框架總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家基于Laravel框架的PHP程序設(shè)計(jì)有所幫助。
您可能感興趣的文章:- Laravel SQL語(yǔ)句記錄方式(推薦)
- Laravel5.* 打印出執(zhí)行的sql語(yǔ)句的方法
- Laravel框架執(zhí)行原生SQL語(yǔ)句及使用paginate分頁(yè)的方法
- laravel實(shí)現(xiàn)查詢最后執(zhí)行的一條sql語(yǔ)句的方法
- Laravel使用原生sql語(yǔ)句并調(diào)用的方法
- laravel 獲取某個(gè)查詢的查詢SQL語(yǔ)句方法
- Laravel 使用查詢構(gòu)造器配合原生sql語(yǔ)句查詢的例子
- Laravel中如何輕松容易的輸出完整的SQL語(yǔ)句