Как хранятся вариации на уровне БД в Commerce 1.x

Главные вкладки

Аватар пользователя webcrf webcrf 17 октября 2018 в 8:31

Привет.
Не могу понять как в БД хранится связь продукта и его вариаций.
Если смотреть таблицу commerce_product то вижу там свои 2 вариации, но где же связь между ними или с товаром?

Комментарии

Аватар пользователя Orion76 Orion76 17 октября 2018 в 9:28

Если я правильно помню, они связываются через поле Product сущности Product Display.

А выбираются при помощи списка значений какого-то поля товара, по которому эти вариации различаются (например Размер и т.п.)

Т.е. Вы добавляете в поле Profuct сущности Product Display несколько товаров(вариаций), у которых в пределах этой группы разные значения только у поля Размер.

Аватар пользователя gun_dose gun_dose 17 октября 2018 в 9:36

продукты - это просто сущности. А связь - это просто поле референс. Соответственно ваши связи хранятся в таблице field_data_машинное_имя_поля_из_дисплея (чаще всего field_data_commerce_product) в колонке entity_id будет айдишник дисплея, а в колонке product_id будет айдишник вариации.

Аватар пользователя webcrf webcrf 17 октября 2018 в 9:48

gun_dose wrote:

field_data_commerce_product

Я вот тоже сначала про нее подумал, а там нет искомых id.
Получается что через дисплеи соединены, т.к.
commerce_product - тут продукты
node - тут понятно ноды или дисплеи в данном случае
и к дисплеям в field_data_field_product указаны строки с продуктами

Аватар пользователя webcrf webcrf 17 октября 2018 в 10:22

<a href="mailto:sas@drupal.org">sas@drupal.org</a> wrote:

Так как связи один к одному то в таблице продуктов есть поле связи с дисплеем

Для меня таблица продуктов - это commerce_product и в ней нет поля связи с дисплеем.

Аватар пользователя webcrf webcrf 17 октября 2018 в 10:28

А мультимагазин - это уже фишка commerce2.x, в первом этого нет?

И что там со вторым на текущий момент, готовности к использованию, не подскажите?

Аватар пользователя gun_dose gun_dose 17 октября 2018 в 10:32

webcrf wrote:

Я вот тоже сначала про нее подумал, а там нет искомых id.

Какое у вас машинное имя поля связи товара с дисплеем?

webcrf wrote:

А мультимагазин - это уже фишка commerce2.x, в первом этого нет?
И что там со вторым на текущий момент, готовности к использованию, не подскажите?

Да, это только во втором. В первом нет и не будет. Второй коммерс уже вполне готов к использованию, но он только для 8 друпала.

Аватар пользователя Orion76 Orion76 17 октября 2018 в 15:09

Кстати да.. я думал, коммерц для восьмерки еще в глубокой бете, а оказывается он уже больше года чуть ли не каждый месяц релизы выдает..
следующий магазин, скорее всего, буду делать на восьмерке-)

Аватар пользователя webcrf webcrf 20 октября 2018 в 13:05

А не знаете, вот есть заказ и есть таблица строк этого заказа 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 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`)
)
Аватар пользователя webcrf webcrf 20 октября 2018 в 13:30

Заметил что в commerce цену хранят в копейках.
Т.е. в админке вводишь 11$, хранится в БД число 1100.
Не подскажите где по коду эту логику искать, в доках не нашел, если честно сложно возвращаться к таким системам как друпал после фреймворков и ООП.

Аватар пользователя gun_dose gun_dose 20 октября 2018 в 14:43

Да, лайн айтем сущность, и цены в копейках. Ссылки дисплеев на продукты и лайн айтемов на продукты хранятся в одной таблице, т.к. это поле там повторно используется.

Если нравится ООП и не нравятся копейки, то делайте магазин на восьмёрке. Но структура таблиц там будет почти идентичной. Такая же структура у любой fieldable entity - в одной таблице хранятся базовые поля, такие, как заголовок и айдишник, а все остальные поля - каждое в своей таблице, т.к. только так можно нормально раелизовать добавление разных полей через админку.