Опубликовать некоторые данные о событиях в обработчике событий Laravel

Ниже приведен код для сохранения некоторых данных в пользовательской таблице при получении события выхода из системы, и теперь мне нужно сохранить те же данные в таблице "login_histories" для записи истории пользовательских журналов. Как же изменить этот дескриптор функции в приведенном ниже коде? Спасибо:)

timestamp_create_login_histories_table.php

public function up()
{
    Schema::create('login_histories', function (Blueprint $table) {
        $table->engine = 'InnoDB';            
        $table->increments('id')->unsigned();

        $table->integer('user_id')->unsigned()->index();
        $table->timestamp('last_login_at')->nullable();
        $table->string('last_login_ip')->nullable();
        $table->timestamps();
        $table->softDeletes();

        $table->foreign('user_id')->nullable()->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');
    });
}

App \ Слушателей \LogSuccessfulLogin.php

namespace App\Listeners;

use Illuminate\Auth\Events\Login;
use Illuminate\Http\Request;

class LogSuccessfulLogin
{
    /**
     * Create the event listener.
     *
     * @param  Request  $request
     * @return void
     */
public function __construct(Request $request)
{
    $this->request = $request;
}

public function handle(Login $event)
{
    $user = $event->user;
    $user->last_login_at = date('Y-m-d H:i:s');
    $user->last_login_ip = $this->request->ip();
    $user->save();
}

Нужно сначала сделать модель login_histories? а потом я могу изменить, как показано ниже кода?

public function handle(Login $event)
{
    $login_histories = $event->login_histories;
    $login_histories->last_login_at = date('Y-m-d H:i:s');
    $login_histories->last_login_ip = $this->request->ip();
    $login_histories->save();
}

1 ответ

Решение

Создать модель для таблицы login_histories

LoginHistory.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use App\User;

class LoginHistory extends Model
{
    protected $table = 'login_histories';

    protected $guarded = [];

    public function user()
    {
         return $this->belongsTo(User::class);//use user classs
    }
}

Обновите App\Listeners\LogSuccessfulLogin.php примерно так. можно сделать разными способами

сохранить историю входа не пользователь

namespace App\Listeners;

use Illuminate\Auth\Events\Login;
use Illuminate\Http\Request;
use App\LoginHistory;

class LogSuccessfulLogin
{
    /**
     * Create the event listener.
     *
     * @param  Request  $request
     * @return void
     */
public function __construct(Request $request)
{
    $this->request = $request;
}

public function handle(Login $event)
{
    LoginHistory::create([
        'user_id' => $event->user->id,
        'last_login_at' => date('Y-m-d H:i:s'),
        'last_login_ip' => $this->request->ip()
    ]);
}
Другие вопросы по тегам