1

我有三个表来存储类别。一个是主要类别,另一个是次要类别,第三个是最终类别。现在我想获得主要类别的最终类别。

通过这样做,我可以通过关系获得具有主要的次要类别,这是 PrimaryCategory 模型:

public function secondaryCategories(){
    return $this->hasMany('App\Models\SecondaryCategory');
}

但是现在在获取二级类别时,我想在二级类别的关系对象中获取最终类别。

我的意思是次要类别应该在主要类别的关系对象中,而最终类别应该在次要类别的关系中。我们怎么能做到这一点?

4

2 回答 2

1

您可以通过对定义的方法进行小的更改来实现此目的。

替换这个:

public function secondaryCategories(){
    return $this->hasMany('App\Models\SecondaryCategory');
}

至:

public function secondaryCategories(){
    return $this->hasMany('App\Models\SecondaryCategory')->with('finalCategory');
}

并将以下方法添加到您的Secondary Category 模型中。

public function finalCategory(){
    return $this->hasMany('App\Models\FinalCategory');
}

这将获取次要类别中的最终类别。

于 2020-07-19T14:02:09.987 回答
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();

请注意,这.将创建一个嵌套级别,例如在第一级您将拥有主要类别,在第二级您将拥有次要类别,在第三级您将拥有最终类别。

您还可以通过具有 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

于 2020-07-19T13:59:07.200 回答