【发布时间】:2019-12-26 16:46:23
【问题描述】:
使用 Laravel eloquent 我有两个模型 Users 和 UserSocialMediaChannels,它们具有一对多的关系,类似于下面的示例。 我想要实现的是让用户按每个用户拥有的总关注者数量排序。 例如,下面示例中的结果应在 userA 之前显示 userB,因为 userB 的关注者(25)大于 usersA 的关注者(15)
如何为每个用户汇总所有社交渠道的关注者,然后为我的结果排序?从数据库中检索结果时,我需要这样做,以便分页结果正确。
uid Name
10 userA
5 userB
id uid Name channel name followers
1 10 userA Facebook 10
2 10 userA Instagram 5
3 5 userB Facebook 20
4 5 userB Instagram 5
public function channels() {
return $this->hasMany('App\Models\UserSocialMediaChannels', 'uid');
}
public function user() {
return $this->belongsTo('App\Models\User', 'uid');
}
在下面的示例中,我只能成功获取至少有一个频道的关注者值 > 10 的用户。
$users = \App\Models\User::with('channels');
$users->whereHas('channels', function($query){
$query->havingRaw('SUM(followers) > ?', 10);
}
我还尝试让每个用户将所有频道关注者字段汇总为一个新字段,但没有成功。想法是按这个新字段对用户进行排序。
$users->whereHas('channels', function($query){
$query->select(DB::raw('sum(followers) as totals'));
});
【问题讨论】:
-
使用最后一个
$users查询时,是否出现任何错误,或者数据未显示? -
@zlatangoralija 我没有收到任何错误,数据和以前一样,但我没有在任何地方看到新字段
totals。
标签: laravel collections eloquent one-to-many