ホームページ >バックエンド開発 >PHPチュートリアル >Laravel フレームワークは、リスナーを使用して SQL ステートメントを記録する機能を実装します。

Laravel フレームワークは、リスナーを使用して SQL ステートメントを記録する機能を実装します。

不言
不言オリジナル
2018-06-07 09:48:201897ブラウズ

この記事では、主に、リスナーを使用して SQL ステートメントを記録する機能を実装するための Laravel フレームワークを紹介し、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/EventServiceプロバイダー.php

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

この時点で操作が実行されるとSQLログが記録されます

関連する推奨事項:

Laravel5でファジーマッチングと複数条件クエリ関数を実装する方法

以上がLaravel フレームワークは、リスナーを使用して SQL ステートメントを記録する機能を実装します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。