Bravo3\Orm\Services\Porter::portTable PHP Метод

portTable() публичный Метод

Port an entire database table from one database to another
public portTable ( string $class_name, string $source, string $destination, integer $batch_size = 100 )
$class_name string Fully qualified class name of entity to port
$source string Source database name set when registering managers
$destination string Target database name set when registering managers
$batch_size integer Number of entities to persist before flushing the destination manager
    public function portTable($class_name, $source, $destination, $batch_size = 100)
    {
        $src = $this->getManager($source);
        $dest = $this->getManager($destination);
        $table = $src->getMapper()->getEntityMetadata($class_name)->getTableName();
        $this->logger->notice('Copying ' . $table . ' from ' . $source . ' to ' . $destination);
        $entities = $src->indexedQuery(new IndexedQuery($class_name, ['@id' => '*']), false);
        $this->logger->notice('Found ' . number_format(count($entities)) . ' records');
        $maintenance = $dest->getMaintenanceMode();
        $dest->setMaintenanceMode(true);
        $counter = 0;
        $flush = function () use(&$counter, $dest) {
            $this->logger->info('Flushing ' . number_format($counter) . ' records');
            $dest->flush();
            $counter = 0;
        };
        foreach ($entities as $entity) {
            $dest->persist($entity);
            if (++$counter == $batch_size) {
                $flush();
            }
        }
        if ($counter) {
            $flush();
        }
        $dest->setMaintenanceMode($maintenance);
        $this->logger->notice('Portation complete for ' . $table);
        return $this;
    }

Usage Example

Пример #1
0
 /**
  * @param InputInterface  $input
  * @param OutputInterface $output
  * @param bool            $export
  * @return void
  */
 protected function port(InputInterface $input, OutputInterface $output, $export = true)
 {
     $entities = $this->getEntities($input->getOption('list'));
     $em = $this->getContainer()->get('orm.em');
     $porter = new Porter(new OutputLogger($output));
     $porter->registerManager('PRIMARY', $em);
     $io = new PharIoDriver($input->getOption($export ? 'output' : 'input'), ArchiveType::memberByKey(strtoupper($input->getOption('format'))));
     $driver = new FilesystemDriver($io);
     $aux = EntityManager::build($driver, $em->getMapper(), $em->getSerialiserMap());
     $porter->registerManager('AUX', $aux);
     $batch_size = max(1, min(1000, (int) $input->getOption('batch')));
     $term = $export ? 'Exporting' : 'Importing';
     foreach ($entities as $class_name) {
         $output->writeln($term . " <info>" . $class_name . "</info>..");
         try {
             if ($export) {
                 $porter->portTable($class_name, 'PRIMARY', 'AUX', $batch_size);
             } else {
                 $porter->portTable($class_name, 'AUX', 'PRIMARY', $batch_size);
             }
         } catch (\Exception $e) {
             $output->writeln("<error>ERROR:</error> " . $e->getMessage());
         }
     }
     if ($export) {
         $output->writeln("<comment>EXPORT COMPLETE</comment>");
     } else {
         $output->writeln("<comment>IMPORT COMPLETE</comment>");
     }
 }
All Usage Examples Of Bravo3\Orm\Services\Porter::portTable