我有三个表来存储类别。一个是主要类别,另一个是次要类别,第三个是最终类别。现在,我想获得带有主要类别的最终类别。
我可以通过PrimaryCategory Model通过关系获得与Primary的Secondary分类:
public function secondaryCategories(){
return $this->hasMany('App\Models\SecondaryCategory');
}
但是现在在获取次要类别时,我想在次要类别的关系对象中获取最终类别。
我的意思是,次要类别应该出现在主要类别的关系对象中,而最终类别应该出现在次要类别的关系中。我们该怎么做?
答案 0 :(得分:1)
您可以通过对定义的方法进行少量更改来实现此目的。
替换此:
public function secondaryCategories(){
return $this->hasMany('App\Models\SecondaryCategory');
}
收件人:
public function secondaryCategories(){
return $this->hasMany('App\Models\SecondaryCategory')->with('finalCategory');
}
并将以下方法添加到您的二级类别模型。
public function finalCategory(){
return $this->hasMany('App\Models\FinalCategory');
}
这将在次要类别中获取最终类别。
答案 1 :(得分:0)
主要类别模型
public function secondaryCategories(){
return $this->hasMany('App\Models\SecondaryCategory');
}
中学类别模型
public function finalCategories(){
return $this->hasMany('App\Models\FinalCategory');
}
现在,当您从主要类别获取记录时,它将变成这种方式
$categories = PrimaryCategory::with('secondaryCategories.finalCategories')->get();
请注意,此.
会创建一个嵌套级别,例如在第一个级别上您将具有主要类别,在第二个级别上您将具有辅助类别,而在第3个级别上您将具有最终类别。
您还可以通过具有hasManyThrough关系的次要类别仅加载最终类别
内部主要类别模型
public function finalCategories()
{
return $this->hasManyThrough('App\Models\FinalCategory', 'App\Models\SecondaryCategory');
}
然后执行
$categories = PrimaryCategory::with('finalCategories')->get();
在使用不同的主键或外键时遇到任何问题请参阅文档 https://laravel.com/docs/7.x/eloquent-relationships#has-many-through