Рейтинг:0

Sql Migrate — рабочий пример

флаг cn

Хорошо, я просто провожу 8 часов с модуль миграции. Мне не удалось найти только один рабочий пример переноса данных sql. Даже собственная документация Drupal имеет статус «устарела».

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

test_migrate_er.info.yml - (модуль включен)

имя: Тестовая миграция ER
тип: модуль
description: 'Импорт узлов новостей через sql ("тест" // Опечатка 3)'
пакет: тест
версия: ВЕРСИЯ
core_version_requirement: ^8.8.0 || ^9.0
проект: 'test_migrate_er'

зависимости:
  - друпал: миграция
  - друпал:мигрировать_инструменты
  - друпал: миграция_плюс

migrate_plus.migration_group.test_migrate_content.yml (это импортируется через «drush cim»)

UUID: 366085cb-4cea-49d1-84a0-534afd31b114
код языка: en
статус: правда
зависимости: { }
идентификатор: test_migrate_content
label:"ТЕСТ ИМПОРТ"
описание: ноль
исходный_тип: ноль
модуль: ноль
общая_конфигурация: ноль
источник:
  плагин: test_source
  ключ: мигрировать

Соединение с базой данных устанавливается в файле local.settings.php (используется исходный ключ).

$databases['migrate']['default'] = [...]

При импорте конфигурации вроде все нормально - ошибок нет... но при экспорте источник бит, включая подэлементы (плагин и ключ), исчезли, как если бы они были недопустимыми атрибутами. Это также объясняет, почему плагин/миграция никогда не отображается при тестировании через драш мс. Кажется, что анализатор конфигурации игнорирует это.

Плагин исходного кода (/web/modules/custom/test_migrate_er/src/Plugin/migrate/source/News.php. — модуль «test_migrate_er» включен)

<?php

пространство имен Drupal\test_migrate_er\Plugin\migrate\source;

используйте Drupal\migrate\Plugin\migrate\source\SqlBase;
используйте Drupal\migrate\Row;

/**
 * Минималистичный пример подключаемого модуля исходного кода SqlBase.
 *
 * @MigrateSource(
 * идентификатор = "источник_теста",
 * source_module = "test_migrate_er",
 * )
 */
класс Новости расширяет SqlBase {

  /**
   * {@inheritdoc}
   */
  запрос публичной функции () {
    // Исходные данные запрашиваются из таблицы 'curling_games'.
    $query = $this->select('tx_news_domain_model_news_copy', 'n')
      ->поля('n', [
        'жидкость',
        'тштамп',
        'дата',
        'свидание',
        'заглавие',
        тизер,
        'основной текст',
      ]);
    вернуть $запрос;
  }



  /**
   * {@inheritdoc}
   */
  поля открытых функций () {
    $поля = [
      'uid' => $this->t('uid'),
      'tstamp' => $this->t('tstamp'),
      'crdate' => $this->t('crdate'),
      'datetime' => $this->t('datetime'),
      'название' => $this->t('название'),
      'тизер' => $this->t('тизер'),
      'bodytext' => $this->t('bodytext'),
    ];
    вернуть $поля;
  }

  /**
   * {@inheritdoc}
   */
  публичная функция getIds() {
    возвращаться [
      'ид' => [
        'тип' => 'целое число',
        'псевдоним' => 'н',
      ],
    ];
  }

  /**
   * {@inheritdoc}
   */
  публичная функция prepareRow(Row $row) {
    // В этом примере показано, как можно добавить исходные свойства в
    // подготовитьСтроку(). Исходные даты хранятся как 2017-12-17.
    // и время как 16:00. Drupal 8 сохраняет поля даты и времени
    // в формате ISO8601 2017-01-15T16:00:00 по UTC.
    // Мы объединяем исходную дату и время и добавляем секунды.
    // Того же результата можно добиться и с помощью 'concat'
    // и 'format_date' обрабатывают плагины в миграции
    // определение.
// $date = $row->getSourceProperty('date');
// $time = $row->getSourceProperty('time');
// $дата/время = $дата. «Т». $ время . ':00';
// $row->setSourceProperty('datetime', $datetime);
    вернуть parent::prepareRow($row);
  }
}

Вы найдете массу примеров кода «миграции» ... ни один из них не предназначен для sql, и ни один из них не обновлен. Интересно, знает ли кто-нибудь рабочий пример или хотя бы правильную документацию. Это сделает следующие дни намного приятнее :)

Спасибо за помощь

флаг cn
Просто чтобы исключить это, группа YAML в вопросе дословно? `метка:"ТЕСТ ИМПОРТ"` недействительна (требуется пробел)
Kevin avatar
флаг in
Многие примеры миграции нацелены на SQL. В модулях migrate и migrate_plus есть множество примеров выполнения определения и настраиваемого исходного плагина различных типов.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.