Привет.
Не могу понять как в БД хранится связь продукта и его вариаций.
Если смотреть таблицу commerce_product то вижу там свои 2 вариации, но где же связь между ними или с товаром?
Если я правильно помню, они связываются через поле Product сущности Product Display.
А выбираются при помощи списка значений какого-то поля товара, по которому эти вариации различаются (например Размер и т.п.)
Т.е. Вы добавляете в поле Profuct сущности Product Display несколько товаров(вариаций), у которых в пределах этой группы разные значения только у поля Размер.
продукты - это просто сущности. А связь - это просто поле референс. Соответственно ваши связи хранятся в таблице field_data_машинное_имя_поля_из_дисплея (чаще всего field_data_commerce_product) в колонке entity_id будет айдишник дисплея, а в колонке product_id будет айдишник вариации.
Я вот тоже сначала про нее подумал, а там нет искомых id.
Получается что через дисплеи соединены, т.к.
commerce_product - тут продукты
node - тут понятно ноды или дисплеи в данном случае
и к дисплеям в field_data_field_product указаны строки с продуктами
Кстати да.. я думал, коммерц для восьмерки еще в глубокой бете, а оказывается он уже больше года чуть ли не каждый месяц релизы выдает..
следующий магазин, скорее всего, буду делать на восьмерке-)
А не знаете, вот есть заказ и есть таблица строк этого заказа commerce_line_item
Не понимаю где у строки ссылка на id самого товара(product_id из commerce_product)
Или они тут намеренно через поле line_item_label хранят SKU и им ссылаются на товар? Удобно ли это если SKU изменится...
Вот таблица
CREATE TABLE `commerce_line_item` (
`line_item_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'The primary identifier for a line item.',
`order_id` int(11) NOT NULLDEFAULT'0' COMMENT 'The unique ID of the order the line item belongs to.',
`type` varchar(255) NOT NULLDEFAULT'' COMMENT 'The module defined type of this line item.',
`line_item_label` varchar(255) NOT NULL COMMENT 'The merchant defined label for a line item.',
`quantity` decimal(10,2) NOT NULLDEFAULT'0.00',
`created` int(11) NOT NULLDEFAULT'0' COMMENT 'The Unix timestamp when the line item was created.',
`changed` int(11) NOT NULLDEFAULT'0' COMMENT 'The Unix timestamp when the line item was most recently saved.',
`data` longblob COMMENT 'A serialized array of additional data.',
PRIMARY KEY(`line_item_id`), KEY `order_id` (`order_id`), KEY `line_item_type` (`type`) )
Заметил что в commerce цену хранят в копейках.
Т.е. в админке вводишь 11$, хранится в БД число 1100.
Не подскажите где по коду эту логику искать, в доках не нашел, если честно сложно возвращаться к таким системам как друпал после фреймворков и ООП.
Да, лайн айтем сущность, и цены в копейках. Ссылки дисплеев на продукты и лайн айтемов на продукты хранятся в одной таблице, т.к. это поле там повторно используется.
Если нравится ООП и не нравятся копейки, то делайте магазин на восьмёрке. Но структура таблиц там будет почти идентичной. Такая же структура у любой fieldable entity - в одной таблице хранятся базовые поля, такие, как заголовок и айдишник, а все остальные поля - каждое в своей таблице, т.к. только так можно нормально раелизовать добавление разных полей через админку.
Комментарии
Если я правильно помню, они связываются через поле Product сущности Product Display.
А выбираются при помощи списка значений какого-то поля товара, по которому эти вариации различаются (например Размер и т.п.)
Т.е. Вы добавляете в поле Profuct сущности Product Display несколько товаров(вариаций), у которых в пределах этой группы разные значения только у поля Размер.
продукты - это просто сущности. А связь - это просто поле референс. Соответственно ваши связи хранятся в таблице field_data_машинное_имя_поля_из_дисплея (чаще всего field_data_commerce_product) в колонке entity_id будет айдишник дисплея, а в колонке product_id будет айдишник вариации.
Свои сущности - product таблицы и поля смотреть в модуле commerce
Я вот тоже сначала про нее подумал, а там нет искомых id.
Получается что через дисплеи соединены, т.к.
commerce_product - тут продукты
node - тут понятно ноды или дисплеи в данном случае
и к дисплеям в field_data_field_product указаны строки с продуктами
Так как связи один к одному то в таблице продуктов есть поле связи с дисплеем
Для меня таблица продуктов - это commerce_product и в ней нет поля связи с дисплеем.
field_data_<название поля связи в ноде дисплея>
А мультимагазин - это уже фишка commerce2.x, в первом этого нет?
И что там со вторым на текущий момент, готовности к использованию, не подскажите?
Какое у вас машинное имя поля связи товара с дисплеем?
Да, это только во втором. В первом нет и не будет. Второй коммерс уже вполне готов к использованию, но он только для 8 друпала.
Кстати да.. я думал, коммерц для восьмерки еще в глубокой бете, а оказывается он уже больше года чуть ли не каждый месяц релизы выдает..
следующий магазин, скорее всего, буду делать на восьмерке-)
А инсталятора для commerce 2.x kickstart получается еще нет ?
А не знаете, вот есть заказ и есть таблица строк этого заказа commerce_line_item
Не понимаю где у строки ссылка на id самого товара(product_id из commerce_product)
Или они тут намеренно через поле line_item_label хранят SKU и им ссылаются на товар? Удобно ли это если SKU изменится...
Вот таблица
`line_item_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'The primary identifier for a line item.',
`order_id` int(11) NOT NULL DEFAULT '0' COMMENT 'The unique ID of the order the line item belongs to.',
`type` varchar(255) NOT NULL DEFAULT '' COMMENT 'The module defined type of this line item.',
`line_item_label` varchar(255) NOT NULL COMMENT 'The merchant defined label for a line item.',
`quantity` decimal(10,2) NOT NULL DEFAULT '0.00',
`created` int(11) NOT NULL DEFAULT '0' COMMENT 'The Unix timestamp when the line item was created.',
`changed` int(11) NOT NULL DEFAULT '0' COMMENT 'The Unix timestamp when the line item was most recently saved.',
`data` longblob COMMENT 'A serialized array of additional data.',
PRIMARY KEY (`line_item_id`),
KEY `order_id` (`order_id`),
KEY `line_item_type` (`type`)
)
Вот для этого оказывается и есть field_data_commerce_product , т.к. line item видимо сущность с полями.
Заметил что в commerce цену хранят в копейках.
Т.е. в админке вводишь 11$, хранится в БД число 1100.
Не подскажите где по коду эту логику искать, в доках не нашел, если честно сложно возвращаться к таким системам как друпал после фреймворков и ООП.
Да, лайн айтем сущность, и цены в копейках. Ссылки дисплеев на продукты и лайн айтемов на продукты хранятся в одной таблице, т.к. это поле там повторно используется.
Если нравится ООП и не нравятся копейки, то делайте магазин на восьмёрке. Но структура таблиц там будет почти идентичной. Такая же структура у любой fieldable entity - в одной таблице хранятся базовые поля, такие, как заголовок и айдишник, а все остальные поля - каждое в своей таблице, т.к. только так можно нормально раелизовать добавление разных полей через админку.