Maison >développement back-end >tutoriel php >Le framework Laravel implémente la fonction d'utilisation d'écouteurs pour enregistrer les instructions SQL

Le framework Laravel implémente la fonction d'utilisation d'écouteurs pour enregistrer les instructions SQL

不言
不言original
2018-06-07 09:48:201899parcourir

Cet article présente principalement le framework Laravel pour implémenter la fonction d'utilisation d'écouteurs pour enregistrer des instructions SQL. Il analyse la création et l'introduction des écouteurs du framework Laravel et les compétences opérationnelles associées à l'utilisation d'écouteurs pour enregistrer des instructions SQL sous forme d'exemples. Les amis qui en ont besoin peuvent Pour référence,

L'exemple de cet article décrit comment le framework Laravel implémente la fonction d'utilisation d'écouteurs pour enregistrer des instructions SQL. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Utilisez des écouteurs pour enregistrer les instructions SQL

1 La classe d'événements pour surveiller les instructions SQL a été définie, créez simplement. la classe d'auditeur directement :

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

2. Code de classe d'auditeur

. /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. Présentez l'auditeur

. /app/Providers/EventServiceProvider.php

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

Lorsque l'opération est effectuée à ce moment, le journal SQL sera enregistré

Recommandations associées :

Comment implémenter la fonction de correspondance floue et de requête multi-conditions dans Laravel5

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn