在 collection laravel 中使用查询范围
Using a query scope in a collection laravel
我的关联模型如下所示(已编辑无关代码):
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();
现在,我知道查询和 Collection 之间是有区别的。但我基本上要问的是 collections 是否有某种类似的范围。当然,最佳解决方案是不必编写两个活动方法,而是将一个方法用于两个目的。
(问题已在评论中回答,但不妨写一个正确的答案)
不可能在 Colletion
中使用查询范围,因为查询范围是 Eloquent 中用于向数据库查询添加约束的概念,而 Collections
只是事物(数据、对象等)的集合。
对于你的情况,你需要做的是改变这一行:
$association->members->active()->count();
至:
$association->members()->active()->count();
这是有效的,因为当我们将 members
作为方法调用时,我们将获得一个 QueryBuilder
实例,并且我们可以在调用 count
之前开始将范围链接到查询方法。
我的关联模型如下所示(已编辑无关代码):
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();
现在,我知道查询和 Collection 之间是有区别的。但我基本上要问的是 collections 是否有某种类似的范围。当然,最佳解决方案是不必编写两个活动方法,而是将一个方法用于两个目的。
(问题已在评论中回答,但不妨写一个正确的答案)
不可能在 Colletion
中使用查询范围,因为查询范围是 Eloquent 中用于向数据库查询添加约束的概念,而 Collections
只是事物(数据、对象等)的集合。
对于你的情况,你需要做的是改变这一行:
$association->members->active()->count();
至:
$association->members()->active()->count();
这是有效的,因为当我们将 members
作为方法调用时,我们将获得一个 QueryBuilder
实例,并且我们可以在调用 count
之前开始将范围链接到查询方法。