我有一个名为users
的表,然后我有一个名为user_stats
的表,stats表保存了该用户在线的时间。我正在尝试通过online_time
中的user_stats
列排序创建前十大在线用户的集合,但我需要传递users
表模型的集合,以便我可以调用username
和motto
等通用列
用户
<?php
namespace App\Database\User;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User as Authenticatable;
use App\Database\User\UserStats;
use Auth;
class User extends Authenticatable
{
protected $table = 'users';
public $timestamps = true;
protected $guarded = ['id'];
public function getStats() {
return UserStats::where('id', $this->id)->first();
}
}
和统计数据
<?php
namespace App\Database\User;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User as Authenticatable;
class UserStats extends Authenticatable
{
protected $table = 'user_stats';
public $timestamps = false;
protected $guarded = ['id'];
}
如果它只是用户,我会这样做
User::orderBy('online_time', 'DESC')->limit($limit)->get();
但是当online_time
属于统计表时,它有点困难。
如果User
和UserStat
之间的关系是1:1,您可以:
class UserStats
{
...
public function user()
{
return $this->belongsTo(User::class);
}
}
得到:
UserStats::with('user')->orderBy('online_time', 'DESC')->limit(10)->get();