Obtain information of a database table

A simple PHP package that returns information about a database's table structure.

View source code on Github

Describe is a PHP package that returns information about a table structure from a database.

Installation

Install Describe via Composer:

$ composer require rougin/describe

Basic Usage

Prior 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:

DriverDescriptionVendor
Rougin\Describe\Driver\MysqlDriverUses the DESCRIBE query.MySQL
Rougin\Describe\Driver\SqlServerDriverUses the INFORMATION_SCHEMA.COLUMNS query.SQL Server
Rougin\Describe\Driver\SqliteDriverUses 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] DatabaseDriver is currently available to drivers MysqlDriver and SqliteDriver only.

After specifying the driver, use the columns method to return a list of columns:

// index.php

/** @var \Rougin\Describe\Column[] */
$columns = $driver->columns('users');

Adding a new database driver

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();
}

Using Table

The 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.

Projects using Describe

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.