php - 在集合 laravel 中使用查询范围

标签 php laravel scope laravel-5 laravel-5.1

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

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

}

我的成员(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();

现在,我知道查询和集合之间存在差异。但我基本上想问的是,是否有某种类似的收藏范围。当然,最佳解决方案是不必编写两个事件方法,而是将一个方法用于两个目的。

最佳答案

(问题已在评论中回答,但不妨写一个正确的答案)

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

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

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

到:

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

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

关于php - 在集合 laravel 中使用查询范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30939737/

相关文章:

php - 每秒只上传一张图片显示 Laravel 中的错误

mysql - Laravel,首先尝试创建一个简单的表,报错找不到

javascript - 为什么这个 JavaScript 代码的结果是 "undefined"?

variables - 访问具有在包内其他函数中的一个函数中定义的键值的变量

php - MySQL 选择 JOIN 3 个表

php - 如何在 codeigniter 中设置私有(private)类以形成验证回调

php - laravel中如何转换$request格式

C# lambda 表达式,作用域变量值

php - TinyMCE MySQL 和 html 标签

php - 将索引数组转换为对象