我是Laravel的初学者。我在Laravel 5.8中有项目。
我有User
模型:
class User extends Authenticatable implements MustVerifyEmail
{
use Notifiable;
use psCMS\Presenters\UserPresenter;
use scopeActiveTrait;
public static $roles = [];
public $dates = ['last_activity'];
// ...
public function scopeHistory()
{
return $this->hasMany('App\UserLoginHistory');
}
// ...
}
和UserLoginHistory
:
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');
}
}
我想通过此代码显示用户登录历史记录:
User::history()->where('id', $idAdmin)->orderBy('id', 'desc')->paginate(25);
但是它不起作用。
此功能不起作用-我没有结果。
我该如何解决?
答案 0 :(得分:1)
首先,您将关系定义为范围(以scope
关键字作为关系的前缀)。尝试为此更新您的模型关系:
public function history()
{
return $this->hasMany('App\UserLoginHistory');
}
然后,根据您的查询,您似乎想获取所有UserLoginHistory
给定User
的记录。您可以通过两种方式(至少)完成此操作。
从UserLoginHistory
模型本身开始,通过外键值约束查询:
$userId = auth()->id(); // get the user ID here.
$results = UserLoginHistory::where('user_id', $userId)->paginate(15);
// ^^^^^^^ your FK column name
根据User
模型,使用您定义的关系:
$userId = auth()->id(); // get the user ID here.
$results = User::find($userId)->history;
第二种方法的缺点是您需要手动对结果进行分页。
答案 1 :(得分:1)
在用户模型中,您应该通过以下方式定义您的关系:
public function history()
{
return $this->hasMany('App\UserLoginHistory');
}
然后,如果要使用历史记录模型进行选择,则可以使用 WhereHas()方法:
User::whereHas(['history'=>function($q) use ($idAdmin) {
$q->where('id',$idAdmin)
}])->orderBy('id', 'desc')->paginate(25);
答案 2 :(得分:0)
您必须进行此更改
public function history()
{
return $this->hasMany('App\UserLoginHistory');
}
用法
$user = User::find($idAdmin);
$userHistories = $user->history()->latest()->paginate(25);
或获取具有所有历史记录的用户
User::with('history')->find($idAdmin);
答案 3 :(得分:0)
// Post model
namespace App;
use App\User;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
public function categories()
{
return $this->belongsToMany('App\Category')->withTimestamps();
}
}
// Category model
namespace App;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
public function posts()
{
return $this->belongsToMany('App\Post')->withTimestamps();
}
}