Я создаю простой API поваренной книги, используя Lumen .
На этом этапе настройки таковы:
- отношение многие ко многим :
recipe
имеет много ingredient
s ingredient
имеет множество recipe
s
- a отношение один ко многим :
-
recipe
имеет много step
s
Отношение многие-ко-многим реализовано с использованием ассоциативной таблицы ingredient_recipe
:
Это работает, как и ожидалось, и позволяет мне получить доступ, например, $someRecipe->ingredients
, чтобы связать все ингредиенты с указанным рецептом c.
Однако - и это та часть, в которой я не совсем уверен - учитывая специфику отношения c recipe-ingredient
, ingredient
также имеет спецификацию c measure
(например, «миллилитр») ) и количество.
В настоящее время я решаю эту проблему, просто добавляя measure_id
к каждому recipe-ingredient
отношению в ассоциативной таблице:
Я выполнил sh это с помощью следующего кода:
$recipe->ingredients()->attach($ingredient_model, ['amount' => GIVEN_AMOUNT, 'measure_id' => GIVEN_MEASURE_ID);
Это работает, но делает запрос, чтобы получить количество и меру для каждого ингредиента в данном рецепте, немного более сложным.
Мой вопрос: есть ли другой, может быть, более Eloquent
способ достижения sh этого, которого я не вижу? Или есть другие рекомендации по проектированию баз данных для таких случаев, о которых я не знаю?