Я решил 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" '