三向枢轴表Laravel

时间:2020-04-16 11:21:27

标签: php laravel eloquent pivot-table

我正在努力在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 个答案:

答案 0 :(得分:0)

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