【问题标题】:Laravel filter models by count of related modelsLaravel 按相关模型数量过滤模型
【发布时间】:2019-02-03 00:03:57
【问题描述】:

我有一个包含用户的组列表。 Groups 有一个属性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');
    }
}

【问题讨论】:

  • 你能展示你的控制器调用/功能吗,你是如何实现它的?

标签: laravel laravel-5 pagination eloquent relationship


【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    相关资源
    最近更新 更多