请参阅Laravel雄辩范围中的关系

Glu*_*ear 1 php laravel eloquent

Laravel 5.7。我有一个模型Cat,带有一个property visible和一个用于检查可见性的范围:

class Cat extends Model
{
    public function scopeVisible($query)
    {
        return $query->where('visible', true);
    }

    public function fleas()
    {
        return $this->hasMany('App\Flea');
    }
}
Run Code Online (Sandbox Code Playgroud)

我有第二个模型Flea

class Flea extends Model
{
    public function cat()
    {
        return $this->belongsTo('App\Cat');
    }
}
Run Code Online (Sandbox Code Playgroud)

我想向添加一个类似的可见性范围Flea,这样我就可以做类似的操作$fleas = Flea::visible()->get(),它只会返回属于可见猫的跳蚤。但是我不确定如何Cat在上的scope方法中引用父对象Flea

编辑:我尝试cat()在上的scopeVisible方法中访问关系Flea,但我从Laravel收到此错误:

Eloquent构建器实例上不存在属性[cat]。

Jon*_*eir 5

用途whereHas()

class Flea extends Model
{
    public function cat()
    {
        return $this->belongsTo('App\Cat');
    }

    public function scopeVisible($query)
    {
        return $query->whereHas('cat', function($query) {
            $query->visible();
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

然后做:

Flea::visible()->get();
Run Code Online (Sandbox Code Playgroud)