Тип данных для хранения товаров в модели заказов
Здравствуйте, начал делать уже второй проект на этом фреймворке, при создании интернет магазина возникла проблема, есть товары, есть вариации (модификации) товаров, ну и соответственно нужно где то хранить этот заказ, но не могу найти подходящего типа данных, так как нужно хранить заказанные продукты в модели заказов, я хотел использовать тип данных many_to_many но он не совсем подходит так как цены на товары могут меняться а хранить заказ пользователя нужно с той ценой с которой он её заказал, да и нужно как то вывести общую стоимость всех заказанных позиций, подскажите можно ли это как-то реализовать тем функционалом cmf что есть или только "костылём" ?
Никита, добрый день, храните данные заказа в сжатом виде в текстовом поле.
1. Создайте поле типа text и поле в базе типа longtext
2. При создании заказа сожмите массив данных например при помощи функции json_encode()
3. Полученный текст сохраните в поле
4. Если хотите отображать содержимое заказа в админке, то для поля задайте функцию, которая будет разжимать json и отображать его в виде таблицы и в этом случае сделайте поле нередактируемым из админки, а то при сохранении заказа данные затрутся.
array("Товары", "text", "cart", array("display_method" => "displayCartInAdmin")), protected $model_display_params = array("not_editable_fields" => array("cart")); public function displayCartInAdmin($cart_archive) { $html = "<table class=\"order\">\n"; $html .= "<tr>\n"; $html .= "<th>Наименование товара</th>\n"; $html .= "<th>Цена, руб.</th>\n"; $html .= "<th>Кол-во</th>\n"; $html .= "<th>Стоимость, руб.</th>\n"; $html .= "</tr>\n"; foreach(json_decode($cart_archive, true) as $product) { ... } return $html."</table>\n"; }
Спасибо, примерно так и хотел сделать, но думал может есть какие то более лёгкие пути
Проще наверное не получится, но можно например еще сделать отдельную модель и туда складывать продукты заказа:
id, id заказа, id или название продукта, цена, количество
Потом по такой модели значительно проще будет строить аналитику.