我是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);
}
但这不起作用。
我该如何解决?
答案 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);
}