在集合 laravel 中使用查询范围

2022-08-30 23:35:52

我的关联模型如下所示(不相关的代码已编辑):

class Association extends Model
{
    public function members() {
        return $this->hasMany('App\Member');
    }

}

我的会员模型如下所示:

class Member extends Model
{
    public function scopeActive($query) {
        return $query->where('membership_ended_at', Null);
    }
    public function scopeInactive($query) {
        return $query->whereNotNull('membership_ended_at');
    }
}

这是我希望能够做到的:

$association = Association::find(49);
$association->members->active()->count();

现在,我知道查询和集合之间有区别。但我基本上要问的是,是否有某种类似的集合范围。当然,最佳解决方案是不必编写两个活动方法,而是同时使用一个用于这两个目的。


答案 1

(问题已经在评论中回答了,但不妨写一个适当的答案)

不可能在 中使用查询范围,因为查询范围是 Eloquent 中用于向数据库查询添加约束的概念,而只是事物(数据、对象等)的集合。ColletionCollections

在你的情况下,你需要做的是改变这一行:

$association->members->active()->count();

自:

$association->members()->active()->count();

这是有效的,因为当我们作为方法调用时,我们将获取一个实例,并且通过该实例,我们可以在调用该方法之前开始将范围链接到查询。membersQueryBuildercount


答案 2

推荐