Перенос друпала 6 в друпал 7 - PullRequest
1 голос
/ 08 июля 2011

По сути, мы хотели переместить часть нашего сайта drupal 6 в нашу сборку drupal 7. Использование модуля миграции. При переносе 155 узлов с их комментариями и таксономией (2 вокаба, один зафиксирован, другой разделен запятыми), последние 30 неудач дают мне эту ошибку:

291 Error PDOException: SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'tid' at row 1: INSERT INTO {taxonomy_index} (nid, tid, sticky, created) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3); Array ( [:db_insert_placeholder_0] => 3057 [:db_insert_placeholder_1] => [:db_insert_placeholder_2] => 0 [:db_insert_placeholder_3] => 1282050381 ) in taxonomy_field_insert() (line 1675 of /u01/facebase/drupal-7.0/modules/taxonomy/taxonomy.module).

291 Ошибка SQLSTATE [HY000]: общая ошибка: 1366 Неверное целочисленное значение: '' для столбца 'tid' в строке 1

Я переношу свои термины с помощью этого запроса:

$query = db_select("$this->_db.term_data", 'td')
  ->fields('td', array('tid', 'name', 'weight'))
  ->condition('v.vid', 7);
  $query->innerJoin("$this->_db.vocabulary", 'v', 'td.vid=v.vid');

Я делаю это для 2 словарей, а затем сопоставляю только имя, формат и вес. Затем я использую этот запрос при переносе узлов:

$query = db_select("$this->_db.node", 'n')
  ->fields('n', array('nid', 'vid', 'type', 'title', 'uid', 'status', 'created', 'changed', 'comment'))
  ->fields('tn', array('tid'))
  ->fields('nr', array('title', 'body', 'teaser'))
  ->condition('n.type', 'dev_content');

  $query->leftJoin("$this->_db.term_node", 'tn', 'tn.vid =n.vid');
  $query->leftJoin("$this->_db.node_revisions", 'nr', 'nr.vid = n.vid');
  $query->addExpression('GROUP_CONCAT(DISTINCT tn.tid)', 'term_list');
  $query->groupBy('n.nid');

Затем я отображаю список терминов для каждого словаря следующим образом:

$this->addFieldMapping('field_dev_tags', 'term_list')
 ->separator(',')
 ->sourceMigration('DevCenterTerm')
 ->arguments(array('source_type' => 'tid'));

$this->addFieldMapping('field_dev_category', 'term_list')
 ->separator(',')
 ->sourceMigration('DevCenterTermPrep')
 ->arguments(array('source_type' => 'tid'));

Я знаю, что это происходит из-за терминов, например, когда я не сопоставляю term_list, создаются все узлы, но на этом все. Есть идеи?

1 Ответ

0 голосов
/ 26 июля 2011

Это проблема с теми узлами, которым не назначена таксономия?Если это так, попробуйте добавить значение по умолчанию к отображению поля таксономии.

    $this->addFieldMapping('field_dev_category', 'term_list')
 ->separator(',')
 ->sourceMigration('DevCenterTermPrep')
 ->arguments(array('source_type' => 'tid'))->defaultValue(12);

В примере beer.inc это описано в комментариях:также можно использовать оба вместе - если значение по умолчанию предоставляется в дополнение к исходному полю, значение по умолчанию будет применено ко всем строкам, в которых исходное поле пусто или равно NULL.

...