table_copy.inc in Migrate 7.2
Same filename and directory in other branches
Copies data_row into a table using drupal_write_record()
File
plugins/destinations/table_copy.incView source
<?php
/**
* @file
* Copies data_row into a table using drupal_write_record()
*/
/**
* Destination class implementing migration into a single table.
*/
class MigrateDestinationTableCopy extends MigrateDestination {
public function __construct($tableName, $keySchema) {
parent::__construct();
$this->tableName = $tableName;
$this->keySchema = $keySchema;
}
public function __toString() {
$output = t('Table copy');
return $output;
}
/**
* Delete a batch of rows at once.
*
* @param $ids
* Array of IDs to be deleted.
*/
public function bulkRollback(array $ids) {
migrate_instrument_start('table_copy bulkRollback');
db_delete($this->tableName)
->condition(key($this->keySchema), $ids, 'IN')
->execute();
migrate_instrument_stop('table_copy bulkRollback');
}
/**
* Import a single row.
*
* @param $entity
* Object object to build. Prefilled with any fields mapped in the Migration.
* @param $row
* Raw source data object - passed through to prepare/complete handlers.
*
* @return array
* Array of key fields of the object that was saved if
* successful. FALSE on failure.
*/
public function import(stdClass $entity, stdClass $row) {
$migration = MigrationBase::currentMigration();
$fields = clone $row;
// Remove all map data, otherwise we'll try to write it to the destination
// table.
foreach ($fields as $field => $data) {
if (strpos($field, 'migrate_map_') === 0) {
unset($fields->{$field});
}
}
$keys = array_keys($this->keySchema);
$values = array();
foreach ($keys as $key) {
$values[] = $row->{$key};
}
$query = db_merge($this->tableName)
->key($keys, $values)
->fields((array) $fields);
try {
$status = $query
->execute();
if ($status == MergeQuery::STATUS_INSERT) {
$this->numCreated++;
}
else {
$this->numUpdated++;
}
return $values;
} catch (MigrateException $e) {
$migration
->saveMessage($e
->getMessage(), $e
->getLevel());
Migration::displayMessage($e
->getMessage());
} catch (Exception $e) {
$migration
->handleException($e);
}
}
public function fields($migration = NULL) {
return array();
}
}
Classes
Name | Description |
---|---|
MigrateDestinationTableCopy | Destination class implementing migration into a single table. |