/** * @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(); } }
/** * 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; }
/** * @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(); }
/** * 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); }
/** * {@inheritdoc} */ public function getTable($database, $table) { return $this->dbal->database($database)->table($table); }
/** * 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']); }