Laravel - 通过两个数据透视表检索集合

Laravel - Retrieve collections through two pivot tables

我目前在 Laravel 5.6 中遇到以下问题,假设我有以下数据库表:

  1. 网站(例如 ID|名称)
  2. Website_providers(例如 id|website_id|provider_id)
  3. Provider_posts(例如 id|provider_id|post_id|post_name)
  4. 帖子(例如 id|name)

我正在寻找一种基于网站 ID 检索帖子的好方法。一个网站可以分配多个提供者(通过 website_providers),并且提供者可以分配多个帖子(他们也可以提供自定义 post_name,这应该推翻标准 posts.name)。

在 Laravel 中实现此目标的最佳方法是什么?我已经尝试过通过关系来做到这一点,但无法让它顺利进行。我还尝试使用很长的连接查询来加载帖子,但感觉不对,必须有一种更简单、更漂亮的方法。

提前致谢!

本案例没有原生关系。

我创建了 HasManyThrough 关系并支持 BelongsToManyRepository on GitHub

安装后可以这样使用:

class Website extends Model {
    use \Staudenmeir\EloquentHasManyDeep\HasRelationships;

    public function posts() {
        return $this->hasManyDeep(
            Post::class,
            ['website_providers', Provider::class, 'provider_posts']
        )->withPivot('provider_posts', ['post_name']);
    }
}