如何在Laravel 5.3中通过多对多关系计算最流行(重复)属性?

时间:2016-12-10 11:15:58

标签: php laravel laravel-5 eloquent

我有两个名为ChannelAppUser的模型,它们通过名为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')这样的方式从频道模型中获得频道的关注者,但我怎样才能获得国家计数

我使用Laravel 5.3并阅读了Eloquent文档,但仍然无法弄明白。任何提示都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

请尝试以下操作,代码尚未经过测试,但有意思,它应该可以运行。别忘了导入数据库。

return $this->appUser
            ->select('country', DB::raw('count(*) as total'))
            ->groupBy('country')
            ->orderBy('total', 'desc')
            ->get()
            ->take(5)
            ->pluck('country','total');