2016-12-10 24 views
0

我有两个模型,分别称为ChannelAppUser,它们通过名为app_user_channels的数据透视表相关。如何通过Laravel 5.3中的多对多关系来计算最流行的(重复发生的)属性?

用户可以“跟随”多渠道,所以我定义我的关系如下渠道可以有很多的用户:

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

请尝试以下操作,代码尚未经过测试,但迂回地,它应该可以正常工作。不要忘记导入数据库。

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

我试过这段代码,但是我得到一个错误,说select()方法不存在。有任何想法吗? –

+0

尝试在appUser结尾添加()。即返回$ this-> appUser() - > – pseudoanime

相关问题