Как связать типы материалов по полю при импорте?

Аватар пользователя Gnom7 Gnom7 8 марта 2019 в 2:11

Здравствуйте! Моя жена ведет учет семейных расходов в Microsoft Access, я хочу перенести ее рабочее место на Drupal 8. По сути вся задача сводится к переносу трех таблиц Access в MySQL. Это можно сделать с помощью модуля feeds (спасибо telegram чату для начинающих). Но проблемма возникает при связывании данных.

Конкретно. Есть таблицы: 1 - категория товаров; 2 - список магазинов; 3 - покупки.
Первые две таблицы достаточно импортировать как они есть. А вот как сделать чтобы в третью таблицу добавились ссылки на сущности (поля) первых двух?

Лучший ответ

Аватар пользователя Gnom7 Gnom7 12 мая 2019 в 5:53

Похоже что разобрался! Smile

1) Создать два типа материала
2) В связуещем добавить поле Reference на связуемый материал
3) В модуле feeds при настройке соответствий для связуемого типа метерила изменить "Сводка" на уникальное поле связующего материала

Благодарю за помощь!

Комментарии

Аватар пользователя ivnish ivnish 8 марта 2019 в 8:11
1

Самый простой способ, сделать первые два таксономией, а "покупки" типом материала. И добавить покупкам два поля на эти термины таксономии

Аватар пользователя Gnom7 Gnom7 8 марта 2019 в 8:22

А при импорте таблицы "покупки" в поля таксономии записывать "название тега"? Спрашиваю по тому, что при создании новой node или редактировании через админку существующей, тег имеет формат "Название (число)". Где число, видемо - индентификатор в БД.

Аватар пользователя ivnish ivnish 8 марта 2019 в 8:45
1

Если кратко, план такой:

1) Установить друпал
2) Создать словарь таксономии "категория товаров", добавить в него термины. Если терминов очень много, то есть модули для импорта из текстовых файлов.
3) Создать словарь таксономии "список магазинов", добавить в него термины.
4) Создать тип материала "покупки", добавить в него необходимые поля для связи с терминами таксономии.
5) Выгрузить из таблицы access таблицу с покупками в текстовый файл, например в CSV
6) Использовать feeds или написать простой импортёр, который будет брать строку из файла и создавать новую ноду

Собственно, интерес здесь представляет только 6 пункт, потому что он может вызвать сложности, если нет опыта работы с feeds или в программировании в целом.

Аватар пользователя Andruxa Andruxa 8 марта 2019 в 22:51
1

Я так понимаю, что необходимо сохранить при импорте связь между покупками и товарами-магазинами, т.к. ID товаров и магазинов в друпале наверняка станут другими.
Решение - при импорте товаров и магазинов, сохранять их старые ID из Access в дополнительные поля. При импорте покупок - в рефренсы добавлять новые ID, делая выборку по значениям старых ID в доп.полях.
Ну или после импорта - пройтись скриптом и заполнить рефренсы по тому же принципу.
В обоих случаях - наверняка, придется кодить.

Аватар пользователя Orion76 Orion76 9 марта 2019 в 8:28
1

Не знаю как дела обстоят с feeds для drupal8, скорее всего так же как и в drupal7.
При импорте данных модулем feeds, если указано поле с уникальным значением для импортируемой записи, т.е. внешний уникальный идентификатор, то feeds добавляет связь внешнего идентификатора с внутренним в специальную свою таблицу (таблица связи ).

т.е. грубо говоря добавляет запись в данную таблицу что-то типа:
- externalID: значение внешнего идентификатора
- internalID: значение внутреннего идентификатора (tid, nid, uid и т.п.)

А далее по данной таблице feeds определяет как минимум:
какую операцию проводить с импортируемой записью: вставить или обновить,
соответственно если запись в таблице связи для внешнего идентификатора есть, то существующий материал обновляется, если нет - добавляется новый.

Так же данная таблица связей используется для импорта полей типа entity reference, taxonomy reference и т.п.
Мне почему-то кажется, в drupal8 данный функционал должен присутствовать в самом модуле feeds (в drupal7 вроде дополнительные модули приходилось использовать)

Аватар пользователя Gnom7 Gnom7 12 мая 2019 в 5:53

Похоже что разобрался! Smile

1) Создать два типа материала
2) В связуещем добавить поле Reference на связуемый материал
3) В модуле feeds при настройке соответствий для связуемого типа метерила изменить "Сводка" на уникальное поле связующего материала

Благодарю за помощь!