Трехсторонний поворотный стол Laravel - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь соединить три модели в своем приложении Laravel. Модели Bottle, Label и Spirit. Я хочу получить все метки на основе bottle_id и spirit_id, поэтому я создал сводную таблицу для хранения отношений между Bottle -Label-Spirit. Пожалуйста, смотрите ниже мои текущие настройки.

DB

+---------+--------+---------+-------------------------+
| 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 - моя сводная таблица

BOTTLE CLASS

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 голосов
/ 16 апреля 2020

Для этого вам не нужна четвертая таблица, вы можете выполнить sh все это, используя hasManyThrough . Это позволит вам запрашивать отдаленные отношения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...