Одна или несколько моделей / таблиц для отношений, которые могут существовать в нескольких моделях - PullRequest
1 голос
/ 26 мая 2020

У меня есть модель «Вино» и модель «Напиток». И Wine, и Drink должны иметь тип (type_id).

Таким образом, база данных должна выглядеть примерно так:

Wine

id, name, type_id, etc.

Drink

id, name, type_id, etc.

Мой вопрос:

Должен ли я

  1. создавать модель «DrinkType» и модель «WineType» или
  2. использовать только тот, который называется «Тип»?

WineType

id, name

DrinkType

id, name

Тип

id, name, type


DB Пример для № 1:

вина

  • id, name, wine_type_id
  • 1, тестовое вино 1, 1
  • 2, тестовое вино 2, 2

Напитки

  • id, name, drink_type_id
  • 1, Test drink, 1

WineTypes

  • идентификатор, имя
  • 1, красный
  • 2, белый

Типы напитков

  • идентификатор, имя
  • 1, Коктейли

DB Пример для № 2:

вина

  • id, name, type_id
  • 1, тестовое вино 1, 1
  • 2, тестовое вино 2, 3

Напитки

  • id, name, type_id
  • 1, Test drink, 2

Типы

  • идентификатор, имя, тип
  • 1, красный, приложение \ вино
  • 2, коктейль, приложение \ напиток
  • 3, белый, приложение \ вино

Я использую фреймворк «Laravel» и знаю о полиморфных отношениях c. Но правильный ли это путь к go? https://laravel.com/docs/7.x/eloquent-relationships#one -to-many-polymorphi c -relations

Надеюсь, мой вопрос имеет смысл, и что у кого-то есть несколько советов, которые я могу подсказать :)

Ответы [ 2 ]

2 голосов
/ 26 мая 2020

, для этого необходимо следовать соотношению Один к одному (Polymorphi c).

вина Название модели: - Wine

id 
name

напитки Название модели: - Напиток

id, 
name,

типы

id - integer
body - text
typeable_id - integer
typeable_type - string

Вы подписаны правильный. https://laravel.com/docs/7.x/eloquent-relationships#one -к-один-полиморф c -отношения

0 голосов
/ 26 мая 2020

Я решил go с последним.

БД выглядит так:

Вино

id, name, type_id

Напиток

id, name, type_id

Тип

id, name, model

Пример:

Вино

1, 2013 Gran Selezione, 1
2, 2013 Barolo Bussia, 1
3, 2018 Juwel Riesling, 4

Напиток

1, Blueberry Mojito, 2
2, Chili-infused honey, 3

Тип

1, Red, App\Wine
2, Cocktail, App\Drink
3, Garnish/Mixer, App\Drink
4, White, App\Wine

Затем в своих WineController и DrinkController я собираюсь проверить type_id следующим образом:

  • Wine: 'type_id' => 'required | integer | exists: types, id, model , "App \ Wine" '

  • Drink:' type_id '=>' required | integer | exists: types, id, model, "App \ Drink" '

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