Pis*_*hio 7 php scope laravel laravel-5 laravel-5.1
我的关联模型看起来像这样(不相关的代码编辑):
class Association extends Model
{
public function members() {
return $this->hasMany('App\Member');
}
}
Run Code Online (Sandbox Code Playgroud)
我的会员模型如下所示:
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');
}
}
Run Code Online (Sandbox Code Playgroud)
这是我希望能够做到的:
$association = Association::find(49);
$association->members->active()->count();
Run Code Online (Sandbox Code Playgroud)
现在,我知道Query和Collection之间存在差异.但我基本上要问的是,是否有某种类似的收藏范围.当然,最佳解决方案是不必编写两种活动方法,而是将两种方法用于两种用途.
(问题已在评论中回答,但减去并写出正确的答案)
Colletion由于查询范围是Eloquent中用于向数据库查询添加约束的概念,而Collections只是事物(数据,对象等)的集合,因此无法在a中使用查询范围.
在您的情况下,您需要做的是更改此行:
$association->members->active()->count();
Run Code Online (Sandbox Code Playgroud)
至:
$association->members()->active()->count();
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为当我们调用members方法时,我们得到一个QueryBuilder实例,然后我们可以在调用count方法之前开始将范围链接到查询.
| 归档时间: |
|
| 查看次数: |
4205 次 |
| 最近记录: |