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