Esempio n. 1
0
 /**
  * @param DatabaseManager $dbal
  */
 public function perform(DatabaseManager $dbal)
 {
     //Database
     $database = $dbal->database($this->option('database'));
     //Database schema
     $schema = $database->table($this->argument('table'))->schema();
     if (!$schema->exists()) {
         throw new DatabaseException("Table {$database->getName()}.{$this->argument('table')} does not exists.");
     }
     $this->writeln("Columns of <comment>{$database->getName()}.{$this->argument('table')}</comment>:");
     $columnsTable = $this->tableHelper(['Column:', 'Database Type:', 'Abstract Type:', 'PHP Type:', 'Default Value:']);
     foreach ($schema->getColumns() as $column) {
         $name = $column->getName();
         $type = $column->getType();
         $abstractType = $column->abstractType();
         $defaultValue = $column->getDefaultValue();
         if ($column->getSize()) {
             $type .= " ({$column->getSize()})";
         }
         if ($column->abstractType() == 'decimal') {
             $type .= " ({$column->getPrecision()}, {$column->getScale()})";
         }
         if (in_array($column->getName(), $schema->getPrimaryKeys())) {
             $name = "<fg=magenta>{$name}</fg=magenta>";
         }
         if (in_array($abstractType, ['primary', 'bigPrimary'])) {
             $abstractType = "<fg=magenta>{$abstractType}</fg=magenta>";
         }
         if ($defaultValue instanceof FragmentInterface) {
             $defaultValue = "<info>{$defaultValue}</info>";
         }
         $columnsTable->addRow([$name, $type, $abstractType, $column->phpType(), $defaultValue ?: self::SKIP]);
     }
     $columnsTable->render();
     if (!empty($indexes = $schema->getIndexes())) {
         $this->writeln("\nIndexes of <comment>{$database->getName()}.{$this->argument('table')}</comment>:");
         $indexesTable = $this->tableHelper(['Name:', 'Type:', 'Columns:']);
         foreach ($indexes as $index) {
             $indexesTable->addRow([$index->getName(), $index->isUnique() ? 'UNIQUE INDEX' : 'INDEX', join(", ", $index->getColumns())]);
         }
         $indexesTable->render();
     }
     if (!empty($foreigns = $schema->getForeigns())) {
         $this->writeln("\nForeign keys of <comment>{$database->getName()}.{$this->argument('table')}</comment>:");
         $foreignsTable = $this->tableHelper(['Name:', 'Column:', 'Foreign Table:', 'Foreign Column:', 'On Delete:', 'On Update:']);
         foreach ($foreigns as $reference) {
             $foreignsTable->addRow([$reference->getName(), $reference->getColumn(), $reference->getForeignTable(), $reference->getForeignKey(), $reference->getDeleteRule(), $reference->getUpdateRule()]);
         }
         $foreignsTable->render();
     }
 }
Esempio n. 2
0
 /**
  * Get all available drivers.
  *
  * @return Driver[]
  */
 protected function getDrivers()
 {
     $drivers = [];
     foreach ($this->dbal->getDatabases() as $database) {
         if (!in_array($database->driver(), $drivers, true)) {
             $drivers[] = $database->driver();
         }
     }
     return $drivers;
 }
Esempio n. 3
0
 /**
  * @param DatabasesConfig $config
  * @param DatabaseManager $dbal
  */
 public function perform(DatabasesConfig $config, DatabaseManager $dbal)
 {
     if ($this->argument('db')) {
         $databases = [$this->argument('db')];
     } else {
         //Every available database
         $databases = $config->databaseNames();
     }
     if (empty($databases)) {
         $this->writeln("<fg=red>No databases found.</fg=red>");
         return;
     }
     $grid = $this->tableHelper(['Name (ID):', 'Database:', 'Driver:', 'Prefix:', 'Status:', 'Tables:', 'Count Records:']);
     foreach ($databases as $database) {
         $database = $dbal->database($database);
         $driver = $database->driver();
         $header = [$database->getName(), $driver->getSource(), $driver->getType(), $database->getPrefix() ?: self::SKIP];
         try {
             $driver->connect();
         } catch (\Exception $exception) {
             $grid->addRow(array_merge($header, ["<fg=red>{$exception->getMessage()}</fg=red>", self::SKIP, self::SKIP]));
             if ($database->getName() != end($databases)) {
                 $grid->addRow(new TableSeparator());
             }
             continue;
         }
         $header[] = "<info>connected</info>";
         foreach ($database->getTables() as $table) {
             $grid->addRow(array_merge($header, [$table->getName(), number_format($table->count())]));
             $header = ["", "", "", "", ""];
         }
         $header[1] && $grid->addRow(array_merge($header, ["no tables", "no records"]));
         if ($database->getName() != end($databases)) {
             $grid->addRow(new TableSeparator());
         }
     }
     $grid->render();
 }
Esempio n. 4
0
 /**
  * Get database by it's name from DatabaseProvider associated with ORM component.
  *
  * @param string $database
  * @return Database
  */
 public function dbalDatabase($database)
 {
     return $this->databases->db($database);
 }
Esempio n. 5
0
 /**
  * {@inheritdoc}
  */
 public function getTable($database, $table)
 {
     return $this->dbal->database($database)->table($table);
 }
Esempio n. 6
0
 /**
  * Migration table, all migration information will be stored in it.
  *
  * @return Table
  */
 protected function migrationsTable()
 {
     return $this->databases->db($this->config['database'])->table($this->config['table']);
 }