Сергей Горностаев, в момент покупки - это когда? Когда нажимает на кнопку перейти к оплате не проблема. Я имею ввиду когда клиент уже смотрит на форму ввода карты на сайте платежной системы. И тут он забыл карту, пошел ее искать и в процессе решил попить чаю. А потом, когда оплатил, у платежной системы или у меня сбой и уведомление пришло через 2 часа. А за это время цена товара изменилась и ты записываешь в order_items не то, что было по факту.
Сергей Горностаев, здесь есть проблема, что пока юзер оплачивает (или идет уведомление) цена может поменяться и есть шанс после оплаты записать в order_items неневерные данные. А если сохранять все условия в cart_items, то тогда данные получишь строго на момент покупки. Но тогда еще придется хранить версии корзин (создавать новую корзину с items при каждом ее открытии).
Талян, название товара, цена скидки, процент, тип скидки, купон - и все это может меняться. Пользователю и для истории нужно сохранить данные на момент заказа. И цену в корзине высчитывать неудобно если нет "продуктов" и цена формируется в результате логики.
Сергей Горностаев, не у таблицы заказов, а у order_items. Получается carts связанная с cart_items, orders связанная с order_items и orders, связанная с carts. cart_items будет дублировать по структуре order_items
maksam07, я думал про сессии, но у меня гости не могут покупать (не магазин) и хочу сделать не удаляемые системой корзины до покупки и обновлять инфу по эвентам (изменился продукт - изменился cart_items) с информированием юзера.
maksam07, на практике дублируют таблицы? Не сталкивался с данными процессами. Или я не понял, как перекладывать. Пересоздать cart_items - это не перекладывать. Перекладывать -это если добавить cart_items полиморфизма и cart_id заменять на order_id.