Небольшой костыль, который позволяет импортировать термины и комментарии с сохранением оригинального идентификатора:
// Термины
class TermMigration extends Migration {
public function __construct($arguments) {
...
$this->addFieldMapping('tid', 'some_primary_key');
}
public function prepare($term, $row) {
db_query("INSERT IGNORE INTO {taxonomy_term_data} (tid) VALUES (?)", array($term->tid));
}
}
// Комментарии
class CommentMigration extends Migration {
public function __construct($arguments) {
...
$this->addFieldMapping('cid', 'some_primary_key');
}
public function prepare($comment, $row) {
db_query("INSERT IGNORE INTO {comment} (cid) VALUES (?)", array($comment->cid));
}
}
Написанное актуально для
Migrate 2.5
Похожие записи
- Пример миграции контента из vBulletin 3 в Drupal 7: ответы в темах (комментарии)
- Пример миграции контента из vBulletin 3 в Drupal 7: структура форума (разделы)
- Как добавить базовое поле сущности (сохраняем User Agent комментатора)
- Добавляем на страницу управления отображением комментария поля "автор" и "дата создания"
- Программно наполнить меню ссылками на термины таксономии
Комментарии
Магический костыль. Действительно помог. Спасибо!
Спасибо! Пригодилось.
Костыль помогает, только вот откатить изменения потом невозможно: из таблиц статистики, данных и ревизий body комментариев данные не удаляются. То есть нужно как-то дописывать процедуру отката, где чистить данные практически вручную, или ещё что делать.
Всё же более правильным вариантом остаётся migrate-way-путь, при котором ID коммента создаётся генератором таблицы, а все соответствия задаются указанием исходной миграции. То есть загрузку комментов осуществляем как обычно, cid не задаём. А вот когда задаём присвоение и прочее, то ставим sourceMigration.
У меня основной проблемой было задать в данных коммента поле parent (cid вручную не стал задавать). Воспользовался такой строкой:
То есть когда я задаю родителя, я использую ту же миграцию, которая идёт в данный момент и выбираю данные, которые уже есть в карте соответствий (мэппинге).
много раз пользовался способом из темы, проблем замечено не было
Использую 7.x-2.6-rc1+13-dev
В логе миграции написано, что данные не создаются, а обновляются. Соответственно, удаления их при откате не происходит.
xandeadx, вот один из логов: 0 created, 68 updated, 0 failed. field_data_comment_body и field_revision_comment_body не очистились, насчёт comment сказать не могу, много поменял.
Ещё у меня странная проблема: комменты откатываются, но штук 5 из 200 примерно удаляться сами не хотят физически из таблиц комментариев. Если загрузить станицу с данными комментами, вылетает ошибка "потери связи с сущностью", в списке содержания (комменты) чисто.
Это, конечно, мелочи, потому что данные я импортирую и откатывать не буду, но вот столкнулся.
С нодами и юзерами проблем нет.
P.S.: модуль всё равно шикарный, спасибо, xandeadx!
Всё же нашёл ошибку: при задании uid (автор коммента), задавал напрямую значения id, но самого пользователя с таким id не импортировал (забанен). Поэтому при выборке была проблема (у migrate тоже).
Решил таким образом:
Добавить комментарий