A simple PHP package that returns information about a database's table structure.
Describe is a PHP package that returns information about a table structure from a database.
Install Describe via Composer:
$ composer require rougin/describePrior in getting information of a table structure, a vendor-specific driver must be implemented:
// index.php
use Rougin\Describe\Driver\MysqlDriver;
$dsn = 'mysql:host=localhost;dbname=test';
$pdo = new PDO($dsn, 'root', '');
$driver = new MysqlDriver($pdo, 'test');Below are the available drivers for specified vendors:
| Driver | Description | Vendor | 
|---|---|---|
Rougin\Describe\Driver\MysqlDriver | Uses the DESCRIBE query. | MySQL | 
Rougin\Describe\Driver\SqlServerDriver | Uses the INFORMATION_SCHEMA.COLUMNS query. | SQL Server | 
Rougin\Describe\Driver\SqliteDriver | Uses the PRAGMA table_info() query. | SQLite | 
Alternatively, the DatabaseDriver can also be used to use a vendor-specific driver based on keyword:
use Rougin\Describe\Driver\DatabaseDriver;
$creds = array('password' => '');
$creds['hostname'] = 'localhost';
$creds['database'] = 'test';
$creds['username'] = 'root';
$driver = new DatabaseDriver('mysql', $creds);[!NOTE]
DatabaseDriveris currently available to driversMysqlDriverandSqliteDriveronly.
After specifying the driver, use the columns method to return a list of columns:
// index.php
/** @var \Rougin\Describe\Column[] */
$columns = $driver->columns('users');To add a new driver for a specified vendor, kindly implement it to a DriverInterface:
namespace Rougin\Describe\Driver;
interface DriverInterface
{
    /**
     * Returns a list of columns from a table.
     *
     * @param  string $table
     * @return \Rougin\Describe\Column[]
     */
    public function columns($table);
    /**
     * Returns a list of tables.
     *
     * @return \Rougin\Describe\Table[]
     */
    public function tables();
}TableThe Table class is similar with the DriverInterface with the difference that it can return the primary key from the list of columns:
use Rougin\Describe\Table;
$table = new Table('users', $driver);
/** @var \Rougin\Describe\Column[] */
$columns = $driver->columns();
/** @var \Rougin\Describe\Column */
$primary = $driver->primary();For more information regarding the Column object, kindly check its code documentation.
The following projects below uses Describe as a valuable tool for getting a structure of a database table:
Combustor is a utility package for Codeigniter 3 that generates controllers, models, and views based on the provided database tables. It uses the Describe package for getting columns from a database table and as the basis for code generation.
Refinery is a console-based package of Migrations Class for the Codeigniter 3. It uses the Describe package for retrieving the database tables for creating database migrations.