Laravel Model 中附加的字段如何使用排序和分页功能?
class Server extends Model
{
protected $table = 'servers';
protected $primaryKey = 'server_id';
protected $appends = ['online'];
public function getOnlineAttribute()
{
$redis = Redis::connection('db0');
if ($redis->hexists('entrance_online', $this->server_id)) {
return $redis->hget('entrance_online', $this->server_id);
} else {
return 0;
}
}
}
如上面的代码所示,一个模型类对应mysql
的一张表,表中已有的字段可以使用mysql
的排序功能,laravel
已封装好;模型中有一个online
字段是附加上去的,表示这台服务器当前在线的人数,因为online
数据会经常变动,所以把数据存放在了redis
中,那么在使用的时候如何根据online
字段进行排序和分页?
我的思路是先把servers
表中的数据从mysql
全读出来,然后使用PHP的数组函数进行排序,再然后对上一步的数据进行array_chunk
分块,根据页码返回对应区块的数据,但感觉这样做不够优雅,数据量大的时候会出现内存不够或者性能问题。
社区的各路精英,有没有更优雅的解决办法呢?
可以考虑先从
redis
中取出已排序的server_id
, 然后再从查mysql