Laravel:按列值计数?

问题描述 投票:-2回答:3

我曾经有这样的查询

$topReferrals = User::orderBy('user_referrals', 'DESC')->get();

最近我改变了我的数据库结构,不计算int数据类型中每个用户的user_referrals,但是为每个用户创建一个名为referred_by的列,并且具有它们被引用的值,我需要调整我的查询以使用新的系统。

我不太确定我会怎么做,我希望有人可以帮忙吗?

php laravel
3个回答
0
投票

Eloquent提供了几种counting relations的方法。一种方法是在$withCount模型上设置User属性:

// assuming your model has a referrals method.
protected $withCount = ['referrals'];

这将在每个查询的模型上附加一个属性,该属性可用于后续查询或集合修改。

User::all()->sortByDesc('referrals');

0
投票

只需在referred_by表中添加User列,因为它表示链接到用户的外键。

使用下面的查询来获取为每个引荐来源引用的用户数:

User::where('referred_by', $referred_user_id)->count();

要么

User::where('referred_by', $referred_user_id)->orderByDesc('referred_by')->get();

注意:只需确保为引用者创建了一个表,以便存储引用的所有详细信息,以防您想要获取有关它们的其他数据。您只需要将关系添加到User模型以直接访问数据库。

public function hasReferrers () {
    $this->hasOne('App\Referrer');
}

其中App\Referrer是您的推荐人表的模型。


0
投票

正如我已经理解了这个问题,我认为这就是我如何获得每个用户的推荐数量。

$all = User::all();
foreach ($all as $current) {
    $current->referrals = User::where('referred_by', $current)->count();
}
$all->sortBy('referrals');

$ all现在应该是按推荐数量排序的用户列表。

© www.soinside.com 2019 - 2024. All rights reserved.