En el post anterior vimos por encima como implementar un migrator, que no es mas que una clase que extiende de Migration. La clase Migration nos quita prácticamente todo el trabajo de encima (en lo que se refiere a procesar la importación y creación de contenidos). Lo único que se necesita para crear un migrator es implementar el método __construct() y decirle donde esta la info que entra, que hace con esa info y la relación de cada fila de un item entrante con respecto a la fila de una entidad.
Dicho lo anterior, el ejemplo de uso para migrar desde DB externas sería:
<?php
class WPMigrationFromDB extends Migration {
public function __construct($arguments) {
// 1
parent::__construct($arguments);
// 2
Database::addConnectionInfo('temporal', 'MI_DB', array(
'driver' => 'mysql',
'database' => 'MI_DB',
'username' => 'USUARIO',
'password' => 'CLAVE',
'host' => 'localhost',
));
// 3
$query = Database::getConnection('MI_DB', 'temporal')
->select('wp_posts', 'posts')
->fields('posts', array(
'id',
'post_title',
'post_content',
))
->condition("post_type", "post", "=")
->condition("post_status", "publish", "=");
// 4
$this->source = new MigrateSourceSQL($query);
// 5
$this->destination = new MigrateDestinationNode('page');
// 6
$this->map = new MigrateSQLMap($this->machineName,
array(
'id' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
)
),
MigrateDestinationNode::getKeySchema()
);
// 7
$this->addFieldMapping('uid')->defaultValue(1);
$this->addFieldMapping('title', 'post_title');
$this->addFieldMapping('body', 'post_content');
}
}
Enumeré cada uno de los puntos mas importantes:
- Dejamos que Migration ejecute su constructor
- Conectamos con una DB externa
- Preparamos la query que va a devolvernos solo las columnas que necesitamos.
- Pasamos la query a $this->source para que sepa desde donde extraer la información.
- Especificamos el destino.
- Establecemos el mapeo entre los campos extraídos de la DB y los field de la entidad que se va a crear.
Y eso es todo lo que necesita una implementación de Migration para procesar la información desde una DB. como siempre, esto es solo un ejemplo rapido para que sepan por donde arrancar, pero si realmente quieren conocer mas sobre implementar un migrator usando de fuente una DB lean https://drupal.org/node/1152150
Chau!
Pingback: Drupal: Importar y sincronizar desde un XML local o remoto con Migrate | Capy
Pingback: Drupal: Migrate | Capy