如何在其他表中添加审核日志?

时间:2019-01-28 03:23:42

标签: php laravel

我一直在使用事件和侦听器,但最终只能更新 users 表。

我试图将侦听器中的句柄更改为 $ event-> log-> description ='something' ;但它说

  

从空值创建默认对象

<?php

namespace App\Listeners;

use Illuminate\Auth\Events\Login;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Carbon\Carbon;

class LogSuccessfulLogin
{

    public function __construct()
    {
    //
    }

    public function handle(Login $event)
    {
        $event->user->current_sign_in_at = Carbon::now();
        $event->user->save();
    }
}

我要实现的目标是,每当用户登录时,它都应将时间戳,说明,操作保存到我的 logs 表中。

这是我要在其中插入日志的表。

https://imgur.com/a/X6mu9OA

1 个答案:

答案 0 :(得分:1)

之所以出现此问题,是因为您试图为$event->log对象分配一个属性,该属性不存在。

但是,要记录事件,您可以只使用查询生成器在logs表中插入新记录。

例如:

<?php

namespace App\Listeners;

use Carbon\Carbon;
use Illuminate\Auth\Events\Login;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Support\Facades\DB; 

class LogSuccessfulLogin
{

    public function __construct()
    {
        //
    }

    public function handle(Login $event)
    {
        $event->user->current_sign_in_at = Carbon::now();
        $event->user->save();

        $this->logEvent($event); 
    }

    private function logEvent(Login $event)
    {
        return DB::table('logs')
            ->insert([
                'user_id' => $event->user->id, 
                'description' => 'Some description', 
                'action' => 'login'
            ]);
    }
}