【问题标题】:Laravel - Retrieve collections through two pivot tablesLaravel - 通过两个数据透视表检索集合
【发布时间】:2019-01-27 19:20:44
【问题描述】:

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

  1. 网站(例如 id|name)
  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 来替代标准的 post.name)。

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

提前致谢!

【问题讨论】:

    标签: php laravel eloquent table-relationships


    【解决方案1】:

    这种情况下没有原生关系。

    我创建了 HasManyThrough 关系并支持 BelongsToMany: Repository 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']);
        }
    }
    

    【讨论】:

    • 您好乔纳斯,谢谢!这似乎(几乎)完美!一个问题,是否有可能使用数据透视表中的额外列来丰富帖子? (在这种情况下,provider_posts > post_name)
    • 真棒乔纳斯,就像一个魅力。非常感谢您的帮助!
    • 最新版本增加了withPivot()方法。我更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    • 2017-06-21
    • 2020-02-20
    • 2018-09-26
    • 2019-02-19
    相关资源
    最近更新 更多