Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Drupal 7 |迁移:如何按名称将分类标记关联到节点?_Php_Drupal 7_Migrate - Fatal编程技术网

Php Drupal 7 |迁移:如何按名称将分类标记关联到节点?

Php Drupal 7 |迁移:如何按名称将分类标记关联到节点?,php,drupal-7,migrate,Php,Drupal 7,Migrate,我尝试设置迁移模块已有一段时间了,但没有成功地将分类术语与节点关联起来 首先让我们说,它的不是D2D迁移,源是旧的symfony数据库 首先,我成功地导出了分类术语: *-.migrate.inc: ... 'symfony_db_countries' => array( 'class_name' => 'MigrateSymfonyCountriesMigration', 'group_name' => 'symfony_db_loc', ), '

我尝试设置迁移模块已有一段时间了,但没有成功地将分类术语与节点关联起来

首先让我们说,它的不是D2D迁移,源是旧的symfony数据库

首先,我成功地导出了分类术语:

*-.migrate.inc:

...
  'symfony_db_countries' => array(
    'class_name' => 'MigrateSymfonyCountriesMigration',
    'group_name' => 'symfony_db_loc',
  ),
  'symfony_db_cities' => array(
    'class_name' => 'MigrateSymfonyCitiesMigration',
    'group_name' => 'symfony_db_loc',
    'dependencies' => array('symfony_db_countries'),
  ),    
  'symfony_db_sights' => array(
    'class_name' => 'MigrateSymfonySightsMigration',
    'group_name' => 'symfony_db_loc',
  ),
...
class MigrateSymfonyCitiesMigration extends MigrateSymfonyCitiesMigrationBase {

  const TABLE_NAME = 'ya_loc_city';

  public function __construct($arguments = array()) {
    parent::__construct($arguments);

    $this->description = t('Migrate cities from Symfony DB.');

    $query = Database::getConnection('symfony', 'default')->select('ya_loc_city', 'c');
    $query->leftJoin('ya_loc_city_translation', 'ct', 'ct.id = c.id');
    $query->fields('c', array());
    $query->fields('ct', array());

    $this->source = new MigrateSourceSQL($query, array(), NULL, array('map_joinable' => FALSE));

    $this->destination = new MigrateDestinationTerm('cities');

    $this->map = new MigrateSQLMap($this->machineName,
        array(
          'id' => array(
            'type' => 'int',
            'not null' => TRUE,
            'description' => 'City ID',
          ),
        ),
        MigrateDestinationTerm::getKeySchema()
    );

    $this->addFieldMapping('name', 'name');
    $this->addFieldMapping('parent', 'country_id')->sourceMigration('symfony_db_countries');
  }
} 
Cities.inc:

...
  'symfony_db_countries' => array(
    'class_name' => 'MigrateSymfonyCountriesMigration',
    'group_name' => 'symfony_db_loc',
  ),
  'symfony_db_cities' => array(
    'class_name' => 'MigrateSymfonyCitiesMigration',
    'group_name' => 'symfony_db_loc',
    'dependencies' => array('symfony_db_countries'),
  ),    
  'symfony_db_sights' => array(
    'class_name' => 'MigrateSymfonySightsMigration',
    'group_name' => 'symfony_db_loc',
  ),
...
class MigrateSymfonyCitiesMigration extends MigrateSymfonyCitiesMigrationBase {

  const TABLE_NAME = 'ya_loc_city';

  public function __construct($arguments = array()) {
    parent::__construct($arguments);

    $this->description = t('Migrate cities from Symfony DB.');

    $query = Database::getConnection('symfony', 'default')->select('ya_loc_city', 'c');
    $query->leftJoin('ya_loc_city_translation', 'ct', 'ct.id = c.id');
    $query->fields('c', array());
    $query->fields('ct', array());

    $this->source = new MigrateSourceSQL($query, array(), NULL, array('map_joinable' => FALSE));

    $this->destination = new MigrateDestinationTerm('cities');

    $this->map = new MigrateSQLMap($this->machineName,
        array(
          'id' => array(
            'type' => 'int',
            'not null' => TRUE,
            'description' => 'City ID',
          ),
        ),
        MigrateDestinationTerm::getKeySchema()
    );

    $this->addFieldMapping('name', 'name');
    $this->addFieldMapping('parent', 'country_id')->sourceMigration('symfony_db_countries');
  }
} 
然后,我从另一个表中创建节点,该表具有分类术语的entityReference字段(field_city)

<?php
class MigrateSymfonySightsMigration extends Migration {
  public function prepareRow($row) {
    parent::prepareRow($row);
    $row->point = 'point (' . $row->longitude . ' ' . $row->latitude. ')';
  }

  public function __construct($arguments = array()) {
    //entry is the name of a group.
    parent::__construct($arguments);
    $this->description = 'Migration sights';

    /*************SOURCE DATA*************/
    ... 

    $this->source = new MigrateSourceSQL($query, array(), NULL,
      array('map_joinable' => FALSE));

    $this->destination = new MigrateDestinationNode('sight');

    /*************MAPPING*************/

    $this->addFieldMapping('field_city', 'name')->sourceMigration('symfony_db_cities');

    $this->map = new MigrateSQLMap($this->machineName,
       array(
         'id' => array('type' => 'int',
                            'unsigned' => TRUE,
                            'not null' => TRUE,
                      )
       ),
       MigrateDestinationNode::getKeySchema()
    );
  }
}
首先,确保您的“field_city”字段接受“cities”术语

然后确保MigrateSymfonyCitiesMigration是MigrateSymfonyRightsMigration的依赖项

,术语引用字段迁移默认具有术语名称的“源类型”。确保“忽略案例”设置正确

如果所有其他操作都失败,则将MigrateSymfonyCitiesMigration映射源ID1更改为“名称”而不是“id”,然后重试(必须重新注册迁移):