Laravel 5.7。我有一个模型Cat
,带有属性visible
,并有一个检查可见性的范围:
class Cat extends Model
{
public function scopeVisible($query)
{
return $query->where('visible', true);
}
public function fleas()
{
return $this->hasMany('App\Flea');
}
}
我有第二个模型Flea
:
class Flea extends Model
{
public function cat()
{
return $this->belongsTo('App\Cat');
}
}
我想为Flea
添加一个类似的可见性范围,这样我就可以做类似$fleas = Flea::visible()->get()
的事情,它只会返回属于可见猫的跳蚤。但是我不确定如何在Cat
的scope方法中引用父项Flea
。
编辑:我尝试在cat()
上的scopeVisible
方法中访问Flea
关系,但是我从Laravel收到此错误:
Eloquent构建器实例上不存在属性[cat]。
答案 0 :(得分:3)
使用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();
});
}
}
然后就做:
Flea::visible()->get();
答案 1 :(得分:0)
您可以编写自己的查询:
$fleas = Flea::whereHas('cat', function($q) {
$q->where('visible', true);
})->get();
或使用Cat
模型:
$cats = Cat::visible()->get();
foreach($cats as $cat) {
foreach ($cat->fleas as $flea) {
// only fleas with visible cats
}
}
您可以将查询用作Flea
模型中的本地范围。