gpt4 book ai didi

php - 如何跟踪 laravel 5 中的每个用户数据库交互?

转载 作者:行者123 更新时间:2023-11-29 02:13:50 25 4
gpt4 key购买 nike

如果任何登录用户访问任何服务,那么我想跟踪该用户运行的所有查询。

示例:

如果 user1 登录并想删除他的个人资料详细信息,而 user2 想更新他的个人资料详细信息,那么我想获取如下表中的数据

user  |   user_id  |   service     |   query  
user1 | 1 | deleteProfile | "DELETE FROM Users WHERE id=1"
user2 | 2 | updateProfile | "UPDATE Users SET lastname='Thaper' WHERE id=2"

为此,我尝试使用类似 antonioribeiro/tracker 的事件日志和 laravel-activitylog等,但它不符合我的要求。

我如何在 Laravel 5.2 中执行此操作?

最佳答案

您可以使用中间件来做到这一点:

use DB;

class DatabaseLogger {

public function handle($request, $next) {
DB::connection()->enableQueryLog();
return $next($request);
}

public function terminate($request, $response) {
$queries = DB::getQueryLog();
$id = Auth::check()?Auth::id():null;
collect($queries)->each(function ($query) use ($id) {
DB::table("querylogtable")->insert(["user_id"=>$id,"query"=>$query]);
});
}

}

将此中间件添加到您的 Kernel.php

protected $middleware = [  
CheckForMaintenanceMode::class,
DatabaseLogger::class
];

请注意,如果要执行大量查询,将所有查询保存在内存中可能会很费力。

更多信息请访问 https://laravel.com/docs/5.0/database#query-logging

作为替代方案,您可以在服务提供商中注册以下内容:

   DB::listen(function ($query) {
//code to log the query
});

但是请注意,记录查询也会触发此事件,导致无限递归记录,因此如果您走这条路线,请确保您不记录日志记录事件。

更多信息:https://laravel.com/docs/5.2/database#running-queries

关于php - 如何跟踪 laravel 5 中的每个用户数据库交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44278135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com