三向枢轴表 Laravel

Posted

技术标签:

【中文标题】三向枢轴表 Laravel【英文标题】:Three-way pivot Table Laravel 【发布时间】:2020-07-29 14:50:06 【问题描述】:

我很难在我的 Laravel 应用中连接三个模型。模型是瓶子、标签和精神。我想获取基于bottle_id 和spirit_id 的所有标签,所以我创建了一个数据透视表来存储Bottle-Label-Spirit 之间的关系。请看下面我当前的设置。

数据库

+---------+--------+---------+-------------------------+
| bottles | labels | spirits | bottle_label_spirit     |
+---------+--------+---------+-------------------------+
| id      | id     | id      | id                      |
| name    | name   | name    | bottle_id               |
|         |        |         | label_id                |
|         |        |         | spirit_id               |
|         |        |         | created_at              |
|         |        |         | updated_at              |
+---------+--------+---------+-------------------------+

bottle_label_spirit 是我的数据透视表

瓶类

class Bottle extends Model

    public function labels() 
        return $this->belongsToMany(Label::class)->withTimestamps();
    

    public function spirits() 
        return $this->belongsToMany(Spirit::class)->withTimestamps();
    

标签类

class Label extends Model

    public function bottles() 
        return $this->belongsToMany(Bottle::class)->withTimestamps();
    

    public function spirits() 
        return $this->belongsToMany(Spirit::class)->withTimestamps();
    

精神类

class Spirit extends Model


    public function labels() 
        return $this->belongsToMany(Label::class)->withTimestamps();
    

    public function bottles() 
        return $this->belongsToMany(Bottle::class)->withTimestamps();
    

问题

所以我的问题是:

这是处理manyToMany 关系的正确方法吗? 如果是,我如何获取所有 bottle_id = 1 和 spirit_id = 1 的标签

【问题讨论】:

【参考方案1】:

您不需要第四张桌子,您可以使用hasManyThrough 完成所有这些操作。这将允许您查询远距离关系。

【讨论】:

以上是关于三向枢轴表 Laravel的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 多行到列 - 枢轴?交叉表?

如何使用枢轴连接两个表并在一个表中组合两个字段

Laravel Eloquent:通过具有多个关系的枢轴将表绑定到另一个表

动态 sql 枢轴连接

T-SQL 枢轴?从行值创建表列的可能性

雪花无法识别枢轴对象