我有两个名为Channel
和AppUser
的模型,它们通过名为app_user_channels
的数据透视表相关联。
用户可以"关注"很多频道和频道可以有很多用户,所以我按如下方式定义了我的关系:
class AppUser extends Model {
protected $fillable = ['country'];
public function channels () {
return $this->belongsToMany('App\Channel', 'app_user_channels');
}
}
class Channel extends Model {
public function appUser () {
return $this->belongsToMany('App\AppUser', 'app_user_channels');
}
}
class AppUserChannel extends Model {
public function appUser() {
return $this->belongsTo('App\AppUser');
}
public function channel() {
return $this->belongsTo('App\Channel');
}
}
我需要在频道的AppUsers中获得前五个最常见的国家/地区。现在,我知道我可以通过return $this->appUser->groupBy('country')
这样的方式从频道模型中获得频道的关注者,但我怎样才能获得国家和计数对于频道追随者(AKA AppUsers)中最常见的国家/地区,有哪些?
我使用Laravel 5.3并阅读了Eloquent文档,但仍然无法弄明白。任何提示都将受到高度赞赏。
答案 0 :(得分:0)
请尝试以下操作,代码尚未经过测试,但有意思,它应该可以运行。别忘了导入数据库。
return $this->appUser
->select('country', DB::raw('count(*) as total'))
->groupBy('country')
->orderBy('total', 'desc')
->get()
->take(5)
->pluck('country','total');