如何显示用户登录历史记录?

时间:2019-09-27 10:40:30

标签: php laravel

我是Laravel的初学者。我在我的项目Laravel 5.8中使用。

我有这个模式:

Schema::create('user_login_histories', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->bigInteger('user_id')->unsigned();
    $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
    $table->dateTime('date_time');
    $table->ipAddress('ip');
    $table->engine = "InnoDB";
    $table->charset = 'utf8mb4';
    $table->collation = 'utf8mb4_unicode_ci';
});

和我的模特:

class UserLoginHistory extends Model
{
    protected $quarded = ['id'];
    public $timestamps = false;
    protected $fillable = ['user_id', 'date_time', 'ip'];

    public function user()
    {
        return $this->belongsTo('App\User');
    }

    // Show User login history
    public function scopeHistory()
    {
        //return $this->hasMany('App\UserLoginHistory');
        return $this->hasMany('App\UserLoginHistory', 'user_id', 'id');
    }
}

我想通过此功能显示我的用户历史记录:

public function getLoginAdminHistory(int $idAdmin)
{   
    return UserLoginHistory::history()->orderBy('id', 'desc')->paginate(25);
}

但这不起作用。

我该如何解决?

1 个答案:

答案 0 :(得分:5)

这里使用范围的方式是错误的。并不是要那样使用它,它不会帮助您解决此问题,因此,我不会对此进行详细介绍。

我将假设您要为每个UserLoginHistory存储多个User,因此您需要的是HasMany类上的User关系。 / p>

因此,要完成这项工作,您需要类似:

User.php

public function userLoginHistory(): HasMany
{
    return $this->hasMany(UserLoginHistory::class);
}

现在您应该可以执行以下操作: $user->userLoginHistory,它将为您返回UserLoginHistory的集合。

public function getLoginAdminHistory(int $idAdmin)
{   
    $user = User::findOrFail($idAdmin);
    return $user->userLoginHistory()->orderBy('id', 'desc')->paginate(25);
}