我一直在使用事件和侦听器,但最终只能更新 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 表中。
这是我要在其中插入日志的表。
答案 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'
]);
}
}