我有一个有用户组的列表。网上论坛的属性为maximum_users
。用户只有在有空位的情况下才能在组中注册(如果该组中注册用户的数量不超过该组的maximum_users
属性)。
在符合以下条件的情况下,我可以过滤组:
$group->maximum_users >= $group->users()->count()
但是在这种情况下分页不起作用。
表结构:
groups
id - integer
maximum_users - integer
users
id - integer
group_id - integer
型号:
class Group extends Model
{
public function users()
{
return $this->hasMany('App\Models\User');
}
}
class User extends Model
{
public function group()
{
return $this->belongsTo('App\Models\Group');
}
}
答案 0 :(得分:1)
如何仅选择具有免费位置的用户可以注册的组? 我需要对结果进行分页。
我强烈建议您使用数据透视表,除非用户只能在一个组中,并且数据透视表应如下所示:
Group::whereRaw('(SELECT COUNT(*)
FROM groups_users
WHERE group_id = group.id) < group.maximum_users')
->paginate(15);
采用当前结构
Group::whereRaw('(SELECT COUNT(*)
FROM users
WHERE group_id = groups.id) < groups.maximum_users')
->paginate(15);