Красноречивые ORM одинаковые отношения таблицы в Laravel 5.2

114
8

Предположим, что таблица фруктов выглядит следующим образом:

id|fruit
----------------
1|apple
2|pear
3|orange
4|lemon
5|mandarin

и что мы хотели получить эти плоды как варианты друг друга без какой-либо иерархии и без другой таблицы для вариантов (ни один иерархический comments-> не отвечает на тип вещи).

Так, например, нужно иметь возможность извлекать $orange=Fruit::find(3)->fruitVariants; , Это в идеале даст нам все связанные плоды (лимон, мандарин).

Обратное также должно быть возможно $lemon=Fruit::find(4)->fruitVariants; следует получить апельсин и мандарин.

Все они должны быть эквивалентными вариантами друг друга, и я понятия не имею, как это сделать. Таблица fruit_fruit? Есть идеи?

спросил(а) 2016-04-08T12:56:00+03:00 4 года, 6 месяцев назад
1
Решение
81

Вы правы, что вам нужна таблица для хранения отношений " многие ко многим".
Эта взаимосвязь много для многих, потому что каждый плод может иметь много вариантов, и каждый вариант подходит для многих фруктов.

Итак, вам нужна таблица fruit_variants:

+---------+----------+
|fruit_id |variant_id|
+---------+----------+
| 3| 4|
| 3| 5|
| 4| 3|
| 4| 5|
| 5| 3|
| 5| 4|
+---------+----------+

А также вам нужно добавить этот метод variants в свою модель Fruit

public function variants()
{
return $this->belongsToMany('Fruit', 'fruit_variants', 'fruit_id', 'variant_id');
}

ответил(а) 2016-04-08T13:28:00+03:00 4 года, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема