Как перейти на Drupal 8 из исходного кода SQL за 6 простых шагов
Опубликовано: 2020-11-24Много говорилось о важности и преимуществах перехода на Drupal 8. Миграция на Drupal является наиболее важной частью рабочего процесса разработки. Нам необходимо обеспечить бесперебойную передачу контента без потери важной пользовательской информации и данных. Ознакомьтесь с этим полным руководством для успешной миграции с Drupal 7 на Drupal 8.
Есть несколько способов перейти на Drupal 8 с использованием различных источников. Мы уже писали о том, как перейти с CSV на Drupal 8. Другие источники включают SQL, XML, JSON и т. Д. В этом блоге мы обсудим переход на Drupal 8 с использованием SQL в качестве источника.

Почему именно SQL?
Хотя выбор источника данных во многом зависит от источника существующих данных, которые необходимо перенести, вот некоторые из других распространенных причин выбора источника SQL для миграции на Drupal 8:
- Легко писать запросы для получения необходимых данных, подключившись к базе данных.
- Перенос данных с одного сервера на другой будет быстрее, чем любой другой метод.
- Уменьшает использование многих дополнительных модулей.
- Нет необходимости в экспорте данных представлений, который используется для экспорта данных представлений в формате CSV с сайтов Drupal 7.
- Нам не понадобится поле пароля просмотра, которое используется для переноса конфиденциальной информации (пароли в хеш-коде), поскольку мы используем запрос к БД.
- Модуль переноса исходного CSV-файла также не нужен, поскольку мы используем исходный код SQL.
Да начнется процесс миграции!
В этом блоге мы будем переводить пользователей на сайт Drupal 8. Ниже приведены шаги, которые мы предпримем для перехода на Drupal 8:
1. Создайте настраиваемый модуль для миграции.
2. Ссылка на исходную базу данных.
3. Определите YML миграции и сопоставьте идентифицированные поля Drupal.
4. Создайте исходный плагин для миграции.
5. Обработайте однозначные, многозначные и адресные поля.
6. Запустите миграцию с помощью инструмента командной строки drush.
Шаг 1. Создайте собственный модуль для миграции на Drupal 8.
Во-первых, давайте создадим настраиваемый модуль, как вы создаете в Drupal 8. Просмотрите этот подробный блог, чтобы узнать о создании настраиваемых модулей в Drupal 8. Здесь мы создаем модуль под названием « миграция сотрудников компании ». Структура модуля следующая:

company_employee_migrate.info.yml: содержит основную информацию о модуле и его зависимостях.
company_employee_migrate.install: он будет использоваться для написания сценариев PHP, которые должны запускаться при установке и удалении модуля. В нашем случае мы удаляем конфигурацию миграции при удалении модуля. Смотрите скриншот ниже для скрипта.

company_employee_migrate.module: будет использоваться для определения общих хуков для сайта. Это начальные вещи, необходимые для модуля. Остальное мы объясним на следующих шагах.
Шаг 2. Ссылка на исходную базу данных
Затем нам нужно настроить исходную базу данных, из которой мы извлекаем данные. Обновите файл settings.php для вашего сайта Drupal, перейдя в корневой каталог -> сайты -> по умолчанию -> settings.php .
Добавьте новое соединение с базой данных ниже соединения по умолчанию, как показано на скриншоте ниже. « Миграция » - это ключ к исходной базе данных.

Шаг 3. Определите YML для миграции и сопоставьте поля Drupal.
Теперь нам нужно определить поля, которые мы хотим перенести, и сопоставить эти поля в yml миграции. В этом примере мы переносим идентификатор пользователя, имя пользователя, пароль, адрес электронной почты, статус, созданную временную метку, имя, фамилию, должность, почтовый адрес и т. Д.
После идентификации полей нам нужно определить миграцию на migrate_plus.migration.company_employee.yml . Теперь давайте подробнее рассмотрим миграцию yml и их сопоставления.

id: уникальный идентификатор yml миграции.
label: Отображаемое имя для миграции.
migration_group: имя группы миграции.
источник: Аннотация Название плагина источника миграции. Это будет определено в аннотации @MigrateSource в src / Plugin / migrate / source / CompanyEmployee.php .
destination: имя подключаемого модуля назначения миграции. В данном случае это entity: user, поскольку мы переносим объект user.
процесс: в процессе мы будем сопоставлять поля Drupal с полями источника. Значения в левой части - это имена полевого компьютера, а значения в правой части - это имена полей, которые мы передаем из исходного плагина.
migration_dependencies: это необязательный ключ. Это будет использоваться только в том случае, если есть какая-либо зависимость от других миграций.

Шаг 4. Создайте исходный плагин для миграции
Плагин источника миграции - это сердце миграции SQL. Ниже приводится подробное объяснение исходного плагина.
- Плагин исходного кода можно создать в src / Plugin / migrate / source / CompanyEmployee.php.
- Пространством имен будет Drupal \ company_employee_migrate \ Plugin \ migrate \ source .
- Аннотации @MigrateSource включают идентификатор исходного плагина, который мы сопоставляем в определении миграции.
- Здесь мы расширяем класс Abstract SqlBase, предоставляемый основным модулем миграции.
См. Снимок экрана ниже для справки.

Плагин исходного кода должен реализовывать следующие три метода:
query (): это вернет данные исходных полей, подключившись к исходной базе данных. См. Приведенный ниже снимок экрана, который вернет данные поля, где идентификатор пользователя больше 0, а почта пользователя заканчивается на «@ phyins.com».

fields (): этот метод вернет доступные поля в источнике. Ниже я добавил фрагмент кода для списка доступных полей вместе с baseFields ().

getIds () : этот метод вернет уникальный идентификатор исходной строки. Приведенный ниже код вернет идентификатор пользователя целочисленного типа, поскольку uid будет уникальным для каждого пользователя.

Помимо вышеупомянутых методов у нас также есть:
prepareRow (): этот метод будет вызываться один раз для каждой строки. Мы загружаем сюда данные из разных таблиц и процессов в соответствии с требованиями. Любое свойство, которое мы создаем с помощью $ row-> setSourceProperty, будет доступно на этапе процесса. Мы будем использовать запрос БД Drupal 8 для получения данных в prepareRow () .
baseFields (): он будет содержать массив основных полей из «users_field_data », которые могут использоваться методом query () . Найдите код на изображении ниже.

Шаг 5: Обработайте однозначные, многозначные и адресные поля.
В Drupal у нас есть разные типы полей, и обработка некоторых полей может быть немного сложной для разработчиков при переносе контента. Я добавил фрагменты кода для некоторых полей ниже:
Поля с одним значением: эти поля включают текстовые поля, логические поля, электронную почту и т. Д. Найдите фрагмент кода ниже для получения поля с одним значением; здесь field_first_name можно установить, как показано ниже.

Поля с несколькими значениями: эти поля включают роли пользователей, рабочие роли, поля выбора с несколькими значениями, флажки и т. Д. Для поля с несколькими значениями нам необходимо вернуть ассоциативный массив. Найдите ниже фрагмент кода для поля «роли».

Поля адреса: перенос поля адреса, предоставленного модулем адреса, мало чем отличается от переноса других полей. Нам нужно предварительно обработать запрошенные данные в ассоциативный массив с соответствующими ключами, как показано ниже для field_mailing_address .

Теперь все готово для запуска миграции, установив модуль company_employee_migrate на сайте Drupal 8.
Шаг 6. Запустите миграцию с помощью инструмента командной строки drush.
Наконец, мы готовы к миграции на SQL. Чтобы запустить миграцию, нам нужно установить drush (если вы еще не используете его).
Список полезных команд drush для миграции на Drupal:
drush migrate-status: вернет статус миграции с подробностями.

drush migrate-import migration_id: это импортирует данные из источника на сайт.

drush migrate-reset-status migration_id: если выполнение сценария остановлено или приостановлено, статус миграции будет отображаться как «Импорт». Эта команда сбросит статус миграции на «Ожидание», чтобы мы могли продолжить импорт миграции.

drush migrate-rollback migration_id: будет использоваться для отката к предыдущему состоянию.
