Не удалось выполнить миграцию с исключением исходного плагина: SQLSTATE[42S22]: Столбец не найден: 1054 Неизвестный столбец


Я пытаюсь перенести профили контента пользователя (Drupal 6) в профили Profile2 (Drupal 7), используя пример из http://grasmash.com/article/migrate-classes-content-profile-profile2 . Когда я пытаюсь импортировать, я получаю следующую ошибку:

Миграция не удалась с исключением исходного плагина: SQLSTATE[42S22]: Столбец не найден: 1054 Неизвестный столбец "ctp.field_titul_pred_jmenem" в "списке полей"

Это миграция класс.

class SkipProfile2Migration extends Migration {
  public function __construct() {
    parent::__construct();
    $this->description = t('Migration of content profile into profile2 entities');

    $this->map = new MigrateSQLMap($this->machineName,
      array(
        'nid' => array(
          'type' => 'int',
          'unsigned' => TRUE,
          'not null' => TRUE,
          'description' => 'D6 Unique Node ID',
          'alias' => 'n',
        )
      ),
      MigrateDestinationNode::getKeySchema(),
        'default'
    );
    $query = Database::getConnection('default', 'legacy')
      ->select('node', 'n')
      ->fields('n', array('nid', 'vid', 'type', 'language', 'title', 'uid', 'status', 'created', 'changed', 'comment', 'promote', 'moderate', 'sticky', 'tnid', 'translate'))
      ->condition('n.type', 'profile', '=');
    $query->join('skip' . '.node_revisions', 'nr', 'n.vid = nr.vid');
    $query->addField('nr', 'body');
    $query->addField('nr', 'teaser');
    $query->addField('nr', 'format');
    $query->join('skip' . '.users', 'u', 'n.uid = u.uid');
    $query->addField('u', 'name');
    $query->leftJoin('skip' . '.content_type_clovek', 'ctp', 'n.nid = ctp.nid AND n.vid = ctp.vid');
    $query->addField('ctp','field_titul_pred_jmenem');
    $query->addField('ctp','field_krestni_jmeno');
    $query->addField('ctp','field_prijmeni');
    $query->addField('ctp','field_titul_za_jmenem');
    $query->addField('ctp','field_telefon');
    $query->addField('ctp','field_email_source');
    $query->addField('ctp','field_ulice');
    $query->addField('ctp','field_cislo_popisne');
    $query->addField('ctp','field_sidlo');
    $query->addField('ctp','field_smerovaci_cislo');
    $query->addField('ctp','field_funkce_cloveka');
    $query->addField('ctp','field_pracoviste');
    $query->addField('ctp','field_stat_iso');
    $query->orderBy('n.nid', 'ASC');

    $source_fields = array(
      'nid' => t('The node ID of the page'),
      'uid' => t('The user ID of a user'),
      'lid' => t('The location ID of a location instance'),
    );

    // Create a MigrateSource object, which manages retrieving the input data.
    $this->source = new MigrateSourceSQL($query, $source_fields);
    $this->destination = new MigrateDestinationProfile2('clovek');

// FIELD MAPPINGS    ...

Кто-нибудь может мне помочь, пожалуйста?

Author: kenorb, 2012-11-09

1 answers

На Drupal 6, работающем под управлением CCK, имена полей базы данных отличаются от имен полей CCK.

На моем тестовом сайте под управлением Drupal 6 я создал следующие поля CCK:

  • страница field_code_page (текст)
  • поле_со_автор (ссылка на пользователя)
  • Список Field_book_list (ссылка на узел)

    screenshot

Таблица базы данных, созданная из CCK для типа контента, содержащего эти поля, имеет следующую базу данных поля:

  • значение field_code_page_value
  • идентификатор поля_со_автора
  • Идентификатор Поля_бук_лист_нид

    screenshot

Весьма вероятно, что поле базы данных называется ctp.field_titul_pred_jmenem_value. Чтобы убедиться, вам следует проверить таблицу базы данных, так как поле базы данных может иметь другое имя, в зависимости от типа поля CCK.

 1
Author: kiamlaluno, 2012-11-10 20:31:51