在集合laravel中使用查询范围

时间:2015-06-19 13:43:50

标签: php laravel scope laravel-5 laravel-5.1

我的关联模型看起来像这样(不相关的代码编辑):

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 个答案:

答案 0 :(得分:6)

(问题已经在评论中回答,但是减去并写出正确答案)

无法在Colletion中使用查询范围,因为查询范围是Eloquent中用于向数据库查询添加约束的概念,而Collections只是事物的集合(数据) ,物品等)。

在您的情况下,您需要做的是更改此行:

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

为:

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

这是有效的,因为当我们调用members作为方法时,我们得到一个QueryBuilder实例,我们可以在调用count方法之前开始将范围链接到查询。