我曾经有这样的查询
$topReferrals = User::orderBy('user_referrals', 'DESC')->get();
最近我改变了我的数据库结构,不计算int数据类型中每个用户的user_referrals,但是为每个用户创建一个名为referred_by
的列,并且具有它们被引用的值,我需要调整我的查询以使用新的系统。
我不太确定我会怎么做,我希望有人可以帮忙吗?
Eloquent提供了几种counting relations的方法。一种方法是在$withCount
模型上设置User
属性:
// assuming your model has a referrals method.
protected $withCount = ['referrals'];
这将在每个查询的模型上附加一个属性,该属性可用于后续查询或集合修改。
User::all()->sortByDesc('referrals');
只需在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
是您的推荐人表的模型。
正如我已经理解了这个问题,我认为这就是我如何获得每个用户的推荐数量。
$all = User::all();
foreach ($all as $current) {
$current->referrals = User::where('referred_by', $current)->count();
}
$all->sortBy('referrals');
$ all现在应该是按推荐数量排序的用户列表。