Мой подход состоял в том, чтобы попытаться придерживаться соглашения. У меня есть модель корзины, модель товара, модель опции и модель стоимости (опция может иметь несколько значений). Как только я получил это там, все встало на свои места. Вам нужно установить рекурсию на «3», но когда вы читаете корзину, вы получаете все идеально продуманным.
Я храню свою корзину товаров / опций отдельно от моего каталога товаров / опций. На стороне корзины, опция принадлежит только одному продукту. На стороне каталога, опция может принадлежать многим продуктам. Ваш подход может быть другим. Я делаю это, потому что варианты могут измениться, и я не хочу, чтобы моя старая информация о продажах изменилась. Я делаю это для всех таблиц корзины. Таблица cart_products отличается от таблицы products. Таблица product_options отличается от таблицы параметров и т. Д.