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()的事情,它只返回属于可见猫的跳蚤。但我不知道如何在Flea上的scope方法中引用父Flea。
编辑:我尝试在scopeVisible方法中访问Flea上的Flea关系,但是我从Laravel获得了这个错误:
属性猫不存在于雄辩的构建器实例中。
发布于 2019-02-14 15:44:09
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();发布于 2019-02-14 15:44:16
您可以编写自己的查询:
$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模型中的本地作用域。
https://stackoverflow.com/questions/54693947
复制相似问题