1. Главная
  2. Форумы
  3. Техподдержка Drupal
  4. Решение проблем

Как хранятся вариации на уровне БД в 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 и в ней нет поля связи с дисплеем.

Аватар пользователя 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 - в одной таблице хранятся базовые поля, такие, как заголовок и айдишник, а все остальные поля - каждое в своей таблице, т.к. только так можно нормально раелизовать добавление разных полей через админку.

Логотип drupal.ru

Содержимое сайта публикуется на условиях CreativeCommons Attribution-ShareAlike 3.0 или более поздней версии. Программные коды в тексте статей — на условиях GNU GPL v2 или более поздней версии.

Документация по совместной работе с репозиторием drupal.ru – https://docs.drupal.ru/code

Drupal – торговая марка Дриса Бёйтарта

12+

AltStyle によって変換されたページ (->オリジナル) /