public function Sql::getHighestId in Drupal 8
Same name and namespace in other branches
- 9 core/modules/migrate/src/Plugin/migrate/id_map/Sql.php \Drupal\migrate\Plugin\migrate\id_map\Sql::getHighestId()
Returns the highest ID tracked by the implementing plugin.
Return value
int The highest ID.
Overrides HighestIdInterface::getHighestId
File
- core/
modules/ migrate/ src/ Plugin/ migrate/ id_map/ Sql.php, line 983
Class
- Sql
- Defines the sql based ID map implementation.
Namespace
Drupal\migrate\Plugin\migrate\id_mapCode
public function getHighestId() {
// Ensure that the first ID is an integer.
$keys = $this->migration
->getDestinationPlugin()
->getIds();
if (reset($keys)['type'] !== 'integer') {
throw new \LogicException('To determine the highest migrated ID the first ID must be an integer');
}
// List of mapping tables to look in for the highest ID.
$map_tables = [
$this->migration
->id() => $this
->mapTableName(),
];
// If there's a bundle, it means we have a derived migration and we need to
// find all the mapping tables from the related derived migrations.
if ($base_id = substr($this->migration
->id(), 0, strpos($this->migration
->id(), $this::DERIVATIVE_SEPARATOR))) {
$migration_manager = $this
->getMigrationPluginManager();
$migrations = $migration_manager
->getDefinitions();
foreach ($migrations as $migration_id => $migration) {
if ($migration['id'] === $base_id) {
// Get this derived migration's mapping table and add it to the list
// of mapping tables to look in for the highest ID.
$stub = $migration_manager
->createInstance($migration_id);
$map_tables[$migration_id] = $stub
->getIdMap()
->mapTableName();
}
}
}
// Get the highest id from the list of map tables.
$ids = [
0,
];
foreach ($map_tables as $map_table) {
// If the map_table does not exist then continue on to the next map_table.
if (!$this
->getDatabase()
->schema()
->tableExists($map_table)) {
continue;
}
$query = $this
->getDatabase()
->select($map_table, 'map')
->fields('map', $this
->destinationIdFields())
->range(0, 1);
foreach (array_values($this
->destinationIdFields()) as $order_field) {
$query
->orderBy($order_field, 'DESC');
}
$ids[] = $query
->execute()
->fetchField();
}
// Return the highest of all the mapped IDs.
return (int) max($ids);
}