我有一个用户模式
class User extends Model {
public function scopeNeutral($query)
{
return $query->where('score', 0);
}
public function scopePositive($query)
{
return $query->where('score', '>', 8);
}
public function scopeNegative($query)
{
return $query->whereBetween('score', [1, 3]);
}
public function team()
{
return $this->belongsTo(Team::class);
}
}
我需要获得控制器中团队的所有积极,消极和中立的用户,
e.g
$users = $team->users();
$positive = $users->positive();
$negative = $users->negative();
$neutral = $users->neutral();
这样做是在每次使用查询时追加where子句,我需要为每次使用单独查询。
答案 0 :(得分:0)
您是否尝试过以下
$positive = $team->users()->positive()->get();
$negative = $team->users()->negative()->get();
您面临的问题是查询对象$users
每次调用方法时都会添加一个where子句。
答案 1 :(得分:0)
您遇到的问题是由于您正在使用的范围方法实际上正在更改$ users对象的内部状态。
例如,您可以克隆原始的$ users对象,如下所示:$users = $team->users();
$positive = clone $users; $positive = $positive->positive();
$negative = clone $users; $negative = $negative->negative();
$neutral = clone $users; $negative->neutral();
很抱歉这里的命名很差,我希望你明白这一点。
我认为还有一种newQuery
方法可行,但在解决方案之上,我肯定会有效。